The deploying works fine, but my normal selects have problems.
The code:
Query q = em.createNativeQuery("select distinct 'BETRIEB' kennzeichen from ausbildungsboerse.betrieb where userid=?1 union select distinct 'SUCHENDER' kennzeichen from ausbildungsboerse.lehrstellengesuch where userid=?1");
q.setMaxResults(2);
q.setParameter(1, userid);
List l = q.getResultList();
produces the following error:
java.lang.IllegalStateException: Operation not allowed.
at com.sun.enterprise.distributedtx.UserTransactionImpl.checkUserTransactionMethod Access(UserTransactionImpl.java:135)
at com.sun.enterprise.distributedtx.UserTransactionImpl.getStatus(UserTransactionI mpl.java:262)
at org.compass.core.transaction.AbstractJTATransactionFactory.getTransactionBoundS ession(AbstractJTATransactionFactory.java:106)
at org.compass.core.impl.DefaultCompass.openSession(DefaultCompass.java:197)
at org.compass.core.impl.DefaultCompass.openSession(DefaultCompass.java:190)
at org.compass.core.impl.DefaultCompass.openSession(DefaultCompass.java:186)
at org.compass.gps.device.jpa.embedded.toplink.CompassSessionEventListener.beginCo mpassSessionAndTx(CompassSessionEventListener.java:118)
at org.compass.gps.device.jpa.embedded.toplink.CompassSessionEventListener.postBeg inTransaction(CompassSessionEventListener.java:98)
at oracle.toplink.essentials.sessions.SessionEventManager.postBeginTransaction(Ses sionEventManager.java:279)
at oracle.toplink.essentials.internal.sessions.AbstractSession.beginTransaction(Ab stractSession.java:394)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.beginTransaction(Uni tOfWorkImpl.java:433)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.beginEarlyTransactio n(UnitOfWorkImpl.java:423)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.executeReadQuery( EJBQueryImpl.java:363)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.getResultList(EJB QueryImpl.java:478)
at de.buegmbh.hwkservices.ejbs.AusbildungsboerseFacade.getArt(AusbildungsboerseFac ade.java:103)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.ja va:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurit yManager.java:1067)
at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:176)
at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java: 2895)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:3986)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInv ocationHandler.java:197)
I changed the following method (inserted lines are highlighted):
private UserTransaction lookupUserTransaction() throws TransactionException {
if (log.isDebugEnabled()) { log.debug("Looking for UserTransaction under "); }
UserTransaction ut;
try { ut = (UserTransaction) context.lookup(utName); ut.getStatus(); } catch (NamingException ne) { ut = null; } catch (IllegalStateException ise) { ut = null; }
} catch (SystemException ise) { ut = null; }
if (ut == null) {
if (log.isInfoEnabled()) { log.info("Failed to locate a UserTransaction under , creating UserTransactionAdapter in its place"); }
ut = new UserTransactionAdapter(transactionManager);
}
return ut;
}
And now it works.