I'm receiving a java.lang.IllegalStateException, but I can't see what's causing it.

One of the causes of an IllegalStateException is that elements of a transaction (particularly the transaction's begin(), commit(), or rollback() methods), are executed by different threads. Even if the calls to the .NET proxies are from the same thread, it is possible that the actual Java calls may be executed by different threads on the Java side. To guarantee that all calls from a single .NET thread are executed by a single Java thread, and that calls from different .NET threads are executed by different Java threads, use the "thread-true" feature described in the User's Guide.