I got this piece of advice in response to a question I asked in another thread: http://www.jboss.org/index.html?module=bb&op=viewtopic&t=154018 It seemed to warrant its own discussion...
Well, one best practice is to definitely not use DefaultDS for your apps. Leave the JBoss AS services with DefaultDS (though you should use a database other than Hypersonic for it), and each of your apps should use their own data sources, unless the apps are accessing the same data in which case they would want to use the same datasource. Actually, if the two apps are accessing the same data you probably really want one set of EJBs accessing the database with two web apps using that one set of EJBs.
I spent the afternoon working on this, and apparently it is not common with MySQL as the database as there is very little information to be found on how to configure JBoss.
I started by creating a second schema (database) in MySQL to house the JBoss infrastructure tables (both are in the same server instance localhost:3306).
The newbie approach (which is where I started) was to use the mysql-ds.xml file found in the documents/examples/jca directory and replicate the datasource XML, rename the copy, update the URL, etc. to get my second data source. This approach appeared to work until I loaded my app and tried to register a timer which failed with a very nice stack trace. After some searching, I found out that it failed because there are two local-tx data sources, which doesn't work since JBoss is attempting to use a 2PC. The timer was using one 1PC source, while my beans were using a different 1PC source.
The next approach was to try to configure both as XA data sources. I couldn't find any examples in the JBoss 5.0.1.GA installation for MySQL, but after some searching on the net I found some XML that seemed passable. I configured both to be XA data sources and deployed my app. When I ran my regression tests, I found that my application was failing because I had a DROP TABLE statement as part of a SQL batch. Apparently DROP (as well as a hand full of other SQL commands) don't play well in MySQL using XA data sources, since they create implied transaction boundaries and that is bad when you are within a XA transaction.
So, I end the day with a few big questions:
1) How important is it to have JBoss infrastructure use the DefaultDS while applications use something else? (Stated in another way, what advantage does this configuration provide?)
2) Is this a supported (as in tried and tested, not as in paid support) configuration using MySQL and JBoss 5.0?
3) Is there really a need to use XA data sources when one source is for JBoss infrastructure and the other is for my application?
4) Is there another solution that I have overlooked or may be otherwise unaware of?