org.apache.derby.jdbc.EmbedXAConnection.close() should use SQLState 25001 - Invalid transaction state - active SQL-Transaction, when an attempt to close is made with an open global transaction. From the specification of disconnect in SQL 2003: 'If any SQL-connection in L is active, then an exception condition is raised: invalid transaction state ? active SQL-transaction." Currently it is using "XJ059", a Derby-specific SQL State.
Although this is currently under debate, at this point we need to assume that SQL States can not change except across major release boundaries, so I am logging this bug but we can't fix it until 11.0.