SourceForge.net Logo
Main Overview Wiki Issues Forum Build Fisheye
Issue Details (XML | Word | Printable)

Key: CMP-630
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Shay Banon
Reporter: Bernd Köster
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Compass

Problems with Transactions using glassfish

Created: 15/May/08 02:00 AM   Updated: 15/May/08 02:20 AM
Component/s: None
Affects Version/s: 2.0.0 RC2, 2.0.0 GA
Fix Version/s: 2.0.1, 2.1.0 M1

Environment:
glassfish 2UR2
persistence.xml:
<property name="toplink.session.customizer" value="org.compass.gps.device.jpa.embedded.toplink.CompassSessionCustomizer" />
<property name="compass.engine.connection" value="file://../generated/compass" />


 Description  « Hide
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)



 All   Comments   Change History      Sort Order: Ascending order - Click to sort in descending order
Bernd Köster added a comment - 15/May/08 02:00 AM
In AbstractJTATransactionFactory

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.