Instead, I would be happy to switch to embedded TomEE, instead of embedded 
Jetty, if that’s practical and there are good step-by-step instructions.

For me, I just need to know what to put into web/src/test/conf/, RunTomEE.java 
(like my RunJetty.java), which jars to use, and essential system properties.

For a wider audience, IMHO something like this page about Jetty would be great:

        https://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty 
<https://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty>

> On 1 Jun 2017, at 7:37 PM, Romain Manni-Bucau <[email protected]> wrote:
> 
> think i know what's happening, not really sure how to solve properly it
> since it can be due to your integration: jetty is mutating the context
> packages (how new InitialContext() is resolved) and indeed we use jetty
> JNDI space instead of openejb one which has the binding. Maybe try starting
> openejb before jetty or enforcing openejb package first
> in javax.naming.Context#URL_PKG_PREFIXES system property (I'm not sure
> there the manipulation jetty does)
> 
> 
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://blog-rmannibucau.rhcloud.com> | Old Blog
> <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> <https://javaeefactory-rmannibucau.rhcloud.com>
> 
> 2017-06-01 13:27 GMT+02:00 JumpStart <[email protected]>:
> 
>> Wow, you are fast. That workaround works. Thank you very much.
>> 
>> Geoff
>> 
>>> On 1 Jun 2017, at 6:55 PM, Romain Manni-Bucau <[email protected]>
>> wrote:
>>> 
>>> Hmm, i can see the error but it is weird, think you can workaround it
>> using
>>> @Resource(name = "java:comp/EJBContext") or @Resource(lookup =
>>> "java:comp/EJBContext")
>>> 
>>> 
>>> Romain Manni-Bucau
>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>> <https://blog-rmannibucau.rhcloud.com> | Old Blog
>>> <http://rmannibucau.wordpress.com> | Github <https://github.com/
>> rmannibucau> |
>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
>>> <https://javaeefactory-rmannibucau.rhcloud.com>
>>> 
>>> 2017-06-01 11:49 GMT+02:00 JumpStart <geoff.callender.jumpstart@
>> gmail.com>:
>>> 
>>>> I’ve created an almost minimal project with instructions in the README.
>>>> Please take it for a spin!
>>>> 
>>>>       https://github.com/geoffcallender/xpro_min
>>>> 
>>>> Geoff
>>>> 
>>>>> On 25 May 2017, at 6:34 PM, Romain Manni-Bucau <[email protected]>
>>>> wrote:
>>>>> 
>>>>> it is the right way but we still need a sample reproducing the issue
>>>> since
>>>>> I think it is more linked to ear/scanning than anything else. The fact
>>>>> InjectionProcessor issue this warning just means something went wrong
>>>>> before.
>>>>> 
>>>>> 
>>>>> Romain Manni-Bucau
>>>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>>>> <https://blog-rmannibucau.rhcloud.com> | Old Blog
>>>>> <http://rmannibucau.wordpress.com> | Github <https://github.com/
>>>> rmannibucau> |
>>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
>>>>> <https://javaeefactory-rmannibucau.rhcloud.com>
>>>>> 
>>>>> 2017-05-25 10:48 GMT+02:00 JumpStart <geoff.callender.jumpstart@
>>>> gmail.com>:
>>>>> 
>>>>>> @Interceptors is definitely where the problem is occurring. This
>> warning
>>>>>> message...
>>>>>> 
>>>>>> WARN [LogStreamAsync.Thread] (Log4jLogStream.java:59) - Injection data
>>>> not
>>>>>> found in JNDI context: jndiName='comp/env/com.goxpro.
>>>>>> xpro.business.domain.base.BaseService/context',
>> target=com.goxpro.xpro.
>>>>>> business.domain.base.BaseService/context
>>>>>> 
>>>>>> …is coming from org.apache.openejb.InjectionProcessor . In debug I
>> see
>>>>>> that it successfully finds this jodi name:
>>>>>> 
>>>>>> “comp/env/com.goxpro.xpro.business.domain.base.BaseService/em"
>>>>>> 
>>>>>> …but not this jodi name…
>>>>>> 
>>>>>> “comp/env/com.goxpro.xpro.business.domain.base.BaseService/context"
>>>>>> 
>>>>>> Here’s BaseService:
>>>>>> 
>>>>>> public abstract class BaseService {
>>>>>> 
>>>>>>      private final String demoModeStr = System.getProperty(“demo");
>>>>>> 
>>>>>>      @PersistenceContext(unitName = "xpro")
>>>>>>      protected EntityManager em;
>>>>>> 
>>>>>>      @Resource
>>>>>>      protected SessionContext context;
>>>>>> …
>>>>>> }
>>>>>> 
>>>>>> The warning comes from InjectionProcessor.
>> fillInjectionProperties(final
>>>>>> ObjectRecipe objectRecipe)
>>>>>> which is down the stack from StatelessInstanceManager.create(final
>>>>>> ThreadContext callContext, final BeanContext beanContext)
>>>>>> where callContext is SecurityManagerService, which is a subclass of
>>>>>> BaseService.
>>>>>> 
>>>>>> @Stateless
>>>>>> @Local(ISecurityManagerServiceLocal.class)
>>>>>> @Remote(ISecurityManagerServiceRemote.class)
>>>>>> @Interceptors({ UsernameCacheRefresher.class })
>>>>>> public class SecurityManagerService extends BaseService
>>>>>>              implements ISecurityManagerServiceLocal,
>>>>>> ISecurityManagerServiceRemote {
>>>>>> 
>>>>>> So, is @Resource no longer the right way to inject SessionContext?
>>>>>> 
>>>>>>> On 24 May 2017, at 9:43 PM, Romain Manni-Bucau <
>> [email protected]>
>>>>>> wrote:
>>>>>>> 
>>>>>>> Le 24 mai 2017 15:39, "JumpStart" <geoff.callender.jumpstart@
>> gmail.com
>>>>> 
>>>>>> a
>>>>>>> écrit :
>>>>>>> 
>>>>>>> Some good news. I’ve commented out the @Interceptors line in each
>>>> session
>>>>>>> bean and now they can be called just fine! I’ll dig a bit deeper into
>>>> why
>>>>>>> the interceptor is failing.
>>>>>>> 
>>>>>>> Producing a sample is going to be hard. If I do, will you require it
>> to
>>>>>> be
>>>>>>> a working maven project (please no)? What’s the minimum you’re
>> looking
>>>>>> for?
>>>>>>> 
>>>>>>> 
>>>>>>> Command line buildable (= dont assume we can use the same IDE with
>> the
>>>>>> same
>>>>>>> config as you). Maven/gradle/ant/Makefile are ok.
>>>>>>> 
>>>>>>> 
>>>>>>>> On 24 May 2017, at 8:08 PM, Romain Manni-Bucau <
>> [email protected]
>>>>> 
>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> Le 24 mai 2017 14:05, "JumpStart" <geoff.callender.jumpstart@
>>>> gmail.com>
>>>>>> a
>>>>>>>> écrit :
>>>>>>>> 
>>>>>>>> The deployment is a collapsed EAR.
>>>>>>>> 
>>>>>>>> If it’s a scanning issue, it wasn’t one before the upgrade.
>>>>>>>> 
>>>>>>>> I’ve not needed @Interceptor before. The javadoc says it’s not
>> needed
>>>>>>> “This
>>>>>>>> annotation is optional if the Interceptors <http://docs.oracle.com/
>>>>>>>> javaee/6/api/javax/interceptor/Interceptors.html> annotation ...
>> used
>>>>>> to
>>>>>>>> associate the interceptor with the target class.” (
>>>>>> http://docs.oracle.com/
>>>>>>>> javaee/6/api/javax/interceptor/Interceptor.html <
>>>>>> http://docs.oracle.com/
>>>>>>>> javaee/6/api/javax/interceptor/Interceptor.html>). I’ve just tried
>> it
>>>>>>>> anyway and the result is the same.
>>>>>>>> 
>>>>>>>> Surely the key to this problem has to be in the following message?
>>>>>>>> 
>>>>>>>> WARN [LogStreamAsync.Thread] (Log4jLogStream.java:59) - Injection
>> data
>>>>>> not
>>>>>>>> found in JNDI context: jndiName='comp/env/com.goxpro.
>>>>>>>> xpro.business.domain.base.BaseService/context',
>>>> target=com.goxpro.xpro.
>>>>>>>> business.domain.base.BaseService/context
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Well this message is a consequence so yes but it doesnt help much
>> :(.
>>>>>> C1n
>>>>>>>> you push a sample on github using 7.x or 4.7 reproducing the issue?
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> On 24 May 2017, at 6:57 PM, Romain Manni-Bucau <
>>>> [email protected]>
>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> How is the deployment/packaging? Can it be a scanning issue? You
>> dont
>>>>>> add
>>>>>>>>> @Interceptor on the interceptor?
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> Le 24 mai 2017 11:28, "JumpStart" <geoff.callender.jumpstart@
>>>> gmail.com>
>>>>>> a
>>>>>>>>> écrit :
>>>>>>>>> 
>>>>>>>>>> I’m upgrading from 4.5.2 to 7.0.3. Since the upgrade, I have an
>>>>>>>>>> interceptor that fails and consequently session beans can’t be
>>>>>> invoked.
>>>>>>> I
>>>>>>>>>> found the same error when I tried to upgrade to 4.6.0.2. Was
>> there a
>>>>>>> JNDI
>>>>>>>>>> change between 4.5.2 and 4.6.0.2?
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> WARN [LogStreamAsync.Thread] (Log4jLogStream.java:59) - Injection
>>>> data
>>>>>>>>>> not found in JNDI context: jndiName='comp/env/com.goxpro.
>>>>>>>>>> xpro.business.domain.base.BaseService/context',
>>>>>> target=com.goxpro.xpro.
>>>>>>>>>> business.domain.base.BaseService/context
>>>>>>>>>> WARN [LogStreamAsync.Thread] (Log4jLogStream.java:59) - Injection
>>>> data
>>>>>>>>>> not found in JNDI context: jndiName='comp/env/com.goxpro.
>>>>>>>>>> xpro.business.domain.base.UsernameCacheRefresher/context',
>>>>>>>>>> target=com.goxpro.xpro.business.domain.base.
>>>>>>>> UsernameCacheRefresher/context
>>>>>>>>>> WARN [LogStreamAsync.Thread] (Log4jLogStream.java:59) - Injection
>>>> data
>>>>>>>>>> not found in JNDI context: jndiName='comp/env/com.goxpro.
>>>>>>>>>> xpro.business.domain.base.UsernameCacheRefresher/context',
>>>>>>>>>> target=com.goxpro.xpro.business.domain.base.
>>>>>>>> UsernameCacheRefresher/context
>>>>>>>>>> WARN [LogStreamAsync.Thread] (Log4jLogStream.java:59) - Injection
>>>> data
>>>>>>>>>> not found in JNDI context: jndiName='comp/env/com.goxpro.
>>>>>>>>>> xpro.business.domain.base.UsernameCacheRefresher/context',
>>>>>>>>>> target=com.goxpro.xpro.business.domain.base.
>>>>>>>> UsernameCacheRefresher/context
>>>>>>>>>> ERROR [LogStreamAsync.Thread] (Log4jLogStream.java:51) -
>>>>>>>>>> EjbTransactionUtil.handleSystemException: null
>>>>>>>>>> java.lang.NullPointerException
>>>>>>>>>>   at com.goxpro.xpro.business.domain.base.
>> UsernameCacheRefresher.
>>>>>>>>>> refreshUsernameCache(UsernameCacheRefresher.java:38)
>>>>>>>>>>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>>>>>>   at sun.reflect.NativeMethodAccessorImpl.invoke(
>>>>>>>>>> NativeMethodAccessorImpl.java:62)
>>>>>>>>>>   at sun.reflect.DelegatingMethodAccessorImpl.invoke(
>>>>>>>>>> DelegatingMethodAccessorImpl.java:43)
>>>>>>>>>>   at java.lang.reflect.Method.invoke(Method.java:497)
>>>>>>>>>>   at org.apache.openejb.core.interceptor.
>>>>>>>>>> ReflectionInvocationContext$Invocation.invoke(
>>>>>>>> ReflectionInvocationContext.
>>>>>>>>>> java:205)
>>>>>>>>>>   at org.apache.openejb.core.interceptor.
>>>>>>>>>> ReflectionInvocationContext.proceed(ReflectionInvocationContext.
>>>>>>> java:186)
>>>>>>>>>>   at org.apache.openejb.monitoring.StatsInterceptor.record(
>>>>>>>>>> StatsInterceptor.java:181)
>>>>>>>>>>   at org.apache.openejb.monitoring.StatsInterceptor.invoke(
>>>>>>>>>> StatsInterceptor.java:100)
>>>>>>>>>>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>>>>>>   at sun.reflect.NativeMethodAccessorImpl.invoke(
>>>>>>>>>> NativeMethodAccessorImpl.java:62)
>>>>>>>>>>   at sun.reflect.DelegatingMethodAccessorImpl.invoke(
>>>>>>>>>> DelegatingMethodAccessorImpl.java:43)
>>>>>>>>>>   at java.lang.reflect.Method.invoke(Method.java:497)
>>>>>>>>>>   at org.apache.openejb.core.interceptor.
>>>>>>>>>> ReflectionInvocationContext$Invocation.invoke(
>>>>>>>> ReflectionInvocationContext.
>>>>>>>>>> java:205)
>>>>>>>>>>   at org.apache.openejb.core.interceptor.
>>>>>>>>>> ReflectionInvocationContext.proceed(ReflectionInvocationContext.
>>>>>>> java:186)
>>>>>>>>>>   at org.apache.openejb.core.interceptor.InterceptorStack.
>>>>>>>>>> invoke(InterceptorStack.java:85)
>>>>>>>>>>   at org.apache.openejb.core.stateless.StatelessContainer._
>>>>>>>>>> invoke(StatelessContainer.java:252)
>>>>>>>>>>   at org.apache.openejb.core.stateless.StatelessContainer.
>>>>>>>>>> invoke(StatelessContainer.java:212)
>>>>>>>>>>   at org.apache.openejb.core.ivm.EjbObjectProxyHandler.
>>>>>>>>>> synchronizedBusinessMethod(EjbObjectProxyHandler.java:265)
>>>>>>>>>>   at org.apache.openejb.core.ivm.EjbObjectProxyHandler.
>>>>>>>>>> businessMethod(EjbObjectProxyHandler.java:260)
>>>>>>>>>>   at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(
>>>>>>>>>> EjbObjectProxyHandler.java:89)
>>>>>>>>>>   at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(
>>>>>>>>>> BaseEjbProxyHandler.java:347)
>>>>>>>>>>   at com.sun.proxy.$Proxy206.passivateEligibleClients(Unknown
>>>>>>>>>> Source)
>>>>>>>>>>   at com.goxpro.xpro.web.daemons.InactiveClientsManagerTask.
>>>>>> doNext(
>>>>>>>>>> InactiveClientsManagerTask.java:65)
>>>>>>>>>>   at com.goxpro.xpro.web.daemons.AbstractTaskRunner.run(
>>>>>>>>>> AbstractTaskRunner.java:124)
>>>>>>>>>>   at java.util.TimerThread.mainLoop(Timer.java:555)
>>>>>>>>>>   at java.util.TimerThread.run(Timer.java:505)
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> The NPE line is indicated in this source...
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> public class UsernameCacheRefresher {
>>>>>>>>>> 
>>>>>>>>>>   @Resource
>>>>>>>>>>   private javax.ejb.SessionContext context;
>>>>>>>>>> 
>>>>>>>>>>   private static final Logger logger = LoggerFactory.getLogger(
>>>>>>>>>> BaseService.class);
>>>>>>>>>> 
>>>>>>>>>>   @AroundInvoke
>>>>>>>>>>   public Object refreshUsernameCache(InvocationContext ic)
>> throws
>>>>>>>>>> Exception {
>>>>>>>>>> 
>>>>>>>>>>           Principal callerPrincipal =
>>>> context.getCallerPrincipal();
>>>>>>>>>> <<< Line 38. NPE happens here.
>>>>>>>>>> 
>>>>>>>>>>           if (callerPrincipal != null) {
>>>>>>>>>>                   UsernameCache.setThreadUsername(
>>>>>>>>>> callerPrincipal.getName());
>>>>>>>>>>           }
>>>>>>>>>>           else {
>>>>>>>>>>                   // Is this even possible? Isn't there a default
>>>>>>>>>> principal of guest (OpenEJB) or anonymous (JBoss)?
>>>>>>>>>>                   logger.error("WATCH OUT -
>> UsernameCacheRefresher
>>>>>>>>>> found callerPrincipal is null!!!!!!!!!!!!!");
>>>>>>>>>>                   UsernameCache.setThreadUsername(null);
>>>>>>>>>>           }
>>>>>>>>>> 
>>>>>>>>>>           return ic.proceed();
>>>>>>>>>>   }
>>>>>>>>>> 
>>>>>>>>>> }
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Here’s an example of how it gets used…
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> @Stateless
>>>>>>>>>> @Local(IEmailManagerServiceLocal.class)
>>>>>>>>>> @Remote(IEmailManagerServiceRemote.class)
>>>>>>>>>> @Interceptors({ UsernameCacheRefresher.class })
>>>>>>>>>> public class EmailManagerService extends BaseService implements
>>>>>>>>>> IEmailManagerServiceLocal, IEmailManagerServiceRemote {
>>>>>>>>>> …
>>>>>>>>>> }
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Thanks in advance,
>>>>>>>>>> 
>>>>>>>>>> Geoff
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>> 
>> 

Reply via email to