(back to JavaNotes)
Example database datasource configs are in docs/example/jca.
Give jboss more memory than the java default - you'll be glad you did (or sorry if you don't)!
Pay attention to the pool sizes in
standardjboss.xml
, especially the Stateless Session Bean pool size, which is 100 by default. This seems pretty low, at least if you have methods that take a while to perform. If you're using MDB's you'll want to bump the
MaximumSize
in the Message Driven Bean
container-invoker-conf
to something larger than the default (which is 15).
A strange error in jboss happened when I had the same ejb-jar declared twice in the application.xml. It caused strange errors that looked like classloader problems. For example, one error was an access violation error when one class tried to access a package-protected method of a class in the same package. Another had to do with a class not being able to call a method in another class because it couldn't find the appropriate signature, even though everything appeared to match.
Oracle
JBoss and Oracle's jdbc driver don't play nice unless you turn on "TrackConnectionByTx".
If you get an error like this when you try to use an Oracle XA datasource:
18:32:14,956 WARN [TransactionImpl] XAException: tx=TransactionImpl:XidImpl [FormatId=257, GlobalId=DBHMKY11//245, BranchQual=] errorCode=XAER_RMERR
oracle.jdbc.xa.OracleXAException
at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1157)
at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:295)
at org.jboss.resource.adapter.jdbc.xa.XAManagedConnection.start(XAManagedConnection.java:133)
at org.jboss.tm.TransactionImpl.startResource(TransactionImpl.java:1137)
at org.jboss.tm.TransactionImpl.enlistResource(TransactionImpl.java:624)
...
Then you need to install the Oracle server JVM option.
CMP EJB Finders
I had a problem where I got "EJB Spec Violation" messages indicating that I had violated section 10.5.6 of the spec. Turns out I was trying to declare a custom CMP finder method with a
String
parameter but it needs to be fully-qualified, i.e.
java.lang.String
instead. See
http://www.jboss.org/thread.jsp?forum=141&thread=33904&message=3783551
Multi-homed machines
jboss uses a lot of ports by default so it's a pain if more than one instance want to share a machine. Weblogic handles this really gracefully - they multiplex all of their comm over one port so it's easy to change, but jboss isn't there yet.
http://www.jboss.org/thread.jsp?forum=61&thread=33958&message=3783690
Unified JMX
You can tell jboss and the JVM to use the same JMX server:
http://www.jboss.org/community/wiki/JBossMBeansInJConsole
This is great for monitoring.