I am recently considering making an application that uses h2 database as its main database (because it comes with JBoss), but I am bit worried about that. I have read in a few places (discussion boards mainly) that one should not use h2 in production. Are there specific reasons for that?
The main reasons not to use H2 (or HSQLDB, or Derby) for production are:
Probability of critical bugs: compared to the 'big' databases Oracle, IBM DB 2, MS SQL Server, MySQL, PostgreSQL, the Java databases are relatively new and therefore possibly not as stable (have bugs). Please note this is true for all newer products, including NoSQL databases, and new releases of the 'big' databases. Generally, the more a product is tested, the less the probability of bugs. Of course it depends on your use case whether it makes sense to pay (possibly a lot of money) for this advantage. In any case you will need to backup the data, in case of hardware failure for example.
Missing features and optimizations: the 'big' databases have more features and optimizations for special use cases. Whether or not you need those features is up to you.
Commercial support: it's easier to get support for bigger databases. Please note commercial support is available for H2 as well. HSQLDB also provides commercial support. IBM used to provide support for Apache Derby (well, IBM Cloudscape), but I believe they stopped.