[
https://jira.jboss.org/jira/browse/EJBTHREE-665?page=com.atlassian.jira.p...
]
Vignesh MPN commented on EJBTHREE-665:
--------------------------------------
I got this same problem when I tried to invoke my SLSB (SLSB1) from a POJO. But when I
invoked my SLSB1 from a different SLSB (SLSB2) (which propagates its transaction), I am
able to access EntityManager in the @PostConstruct of my SLSB1. While executing the
@PostConstruct of SLSB1, the propagated transaction of the invoking method in SLSB2 is
still active and may be the EntityManager has a transaction context.
@Carlo
EJB 3 4.5.2: EntityManager access in a SLSB is not allowed in @PostConstruct.
But there is a catch there. Table 2 does not list "EntityManager access" in the
operations allowed for PostConstruct method. But in the reasons for disallowing operations
in Table 2, it states "Accessing resource managers, enterprise beans, and the
EntityManager is disallowed in the
session bean methods for which the container does not have a meaningful transaction
context and/or client security context."
Based on that, in the scenario stated above, @PostConstruct of SLSB1 does have a
meaningful transaction context (as that of the propagated transaction).
So, is it valid to access EntityManager in the @PostConstruct of SLSB1?
@PostConstruct throws NPE when EntityManager is used
----------------------------------------------------
Key: EJBTHREE-665
URL:
https://jira.jboss.org/jira/browse/EJBTHREE-665
Project: EJB 3.0
Issue Type: Bug
Components: EJB3 Extensions
Affects Versions: EJB 3.0 RC8 - FD
Environment: Windows XP, JBoss 4.0.4.GA + EJB-3.0-RC8
Reporter: Steven Verze
Priority: Minor
Fix For: Branch_4_2
Attachments: EJB-665.patch, EJB-665.patch, EJB-665.patch
@PostConstruct method throws NPE when called on a stateless session bean.
The method iteself accesses the enetity manager and tries create a query, the following
exception is experienced:
java.lang.RuntimeException: java.lang.NullPointerException
at
org.jboss.ejb3.interceptor.LifecycleInterceptorHandler.postConstruct(LifecycleInterceptorHandler.java:109)
at org.jboss.ejb3.EJBContainer.invokePostConstruct(EJBContainer.java:582)
at org.jboss.ejb3.AbstractPool.create(AbstractPool.java:108)
at org.jboss.ejb3.ThreadlocalPool.get(ThreadlocalPool.java:48)
at
org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:54)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at
org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at
org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at
org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:227)
at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
at
org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828)
at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681)
at
org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358)
at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:398)
at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239)
Caused by: java.lang.NullPointerException
at
org.jboss.ejb3.entity.ManagedEntityManagerFactory.getNonTxEntityManager(ManagedEntityManagerFactory.java:58)
at
org.jboss.ejb3.entity.ManagedEntityManagerFactory.getTransactionScopedEntityManager(ManagedEntityManagerFactory.java:163)
at
org.jboss.ejb3.entity.TransactionScopedEntityManager.createQuery(TransactionScopedEntityManager.java:125)
at
com.teleglobal.modules.snapaccount.services.SnapAccountSendProcessServiceBean.initialiseSpendCardQuery(SnapAccountSendProcessServiceBean.java:83)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.jboss.ejb3.interceptor.LifecycleInvocationContextImpl.proceed(LifecycleInvocationContextImpl.java:159)
at
org.jboss.ejb3.interceptor.LifecycleInterceptorHandler.postConstruct(LifecycleInterceptorHandler.java:105)
at org.jboss.ejb3.EJBContainer.invokePostConstruct(EJBContainer.java:582)
at org.jboss.ejb3.AbstractPool.create(AbstractPool.java:108)
at org.jboss.ejb3.ThreadlocalPool.get(ThreadlocalPool.java:48)
at
org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:54)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at
org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at
org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at
org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:227)
at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
at
org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828)
at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681)
at
org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358)
at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:398)
at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239)
at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:190)
at org.jboss.remoting.Client.invoke(Client.java:525)
at org.jboss.remoting.Client.invoke(Client.java:488)
at
org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:55)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at
org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at
org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:55)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:78)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102)
at $Proxy3.getBatchNumbers(Unknown Source)
at
com.teleglobal.modules.snapaccount.services.SnapAccountSendProcessServiceTest.testGetBatchNumbers(SnapAccountSendProcessServiceTest.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Here is a the post construct method:
@PostConstruct
void initialiseSpendCardQuery()
{
StringBuilder sendCardQueryString = new StringBuilder();
sendCardQueryString.append("SELECT c FROM Card AS c WHERE c.status = 'U'
AND c.batchNumber IN (");
long[] batchNumbers = getBatchNumbers();
for (int i = 0; i < batchNumbers.length; i++)
{
sendCardQueryString.append("?").append(i);
if (i+1 < batchNumbers.length)
sendCardQueryString.append(",");
}
sendCardQueryString.append(") AND c NOT IN (SELECT lc.sendCard FROM SendCardLock
AS lc)");
sendCardQuery = entityManager.createQuery(sendCardQueryString.toString());
for (int i = 0; i < batchNumbers.length; i++)
sendCardQuery.setParameter(i, batchNumbers[i]);
}
It happens when the entityManager is used.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira