Jörg Hoh created SLING-3525:
-------------------------------

             Summary: Launchpad notification thread cannot access JNDI 
ressources on Websphere
                 Key: SLING-3525
                 URL: https://issues.apache.org/jira/browse/SLING-3525
             Project: Sling
          Issue Type: Improvement
          Components: Launchpad
    Affects Versions: Launchpad Base 2.5.0
         Environment: Websphere 7 on Linux
            Reporter: Jörg Hoh


We have an existing JavaEnterprise-based application, which we want to move 
into sling running on IBM Websphere appserver. In some of the resulting bundles 
we need to access JNDI resources.

We get this exception:

{code}
[29.04.14 03:14:01:790 CEST]     FFDC 
Exception:javax.naming.ConfigurationException 
SourceId:com.ibm.ws.naming.java.javaURLContextImpl.throwConfigurationExceptionWithDefaultJavaNS
 ProbeId:440 Reporter:java.lang.Class@5ef85ef8 
javax.naming.ConfigurationException: A JNDI operation on a "java:" name cannot 
be completed because the server runtime is not able to associate the 
operation's thread with any J2EE application component.  This condition can 
occur when the JNDI client using the "java:" name is not executed on the thread 
of a server application request.  Make sure that a J2EE application does not 
execute JNDI operations on "java:" names within static code blocks or in 
threads created by that J2EE application.  Such code does not necessarily run 
on the thread of a server application request and therefore is not supported by 
JNDI operations on "java:" names. [Root exception is 
javax.naming.NameNotFoundException: Name comp/env/tm not found in context 
"java:".] 
        at 
com.ibm.ws.naming.java.javaURLContextImpl.throwConfigurationExceptionWithDefaultJavaNS(javaURLContextImpl.java:428)
 
        at 
com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:399) 
        at 
com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:221) 
        at 
com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:161) 
        at javax.naming.InitialContext.lookup(InitialContext.java:436) 
        ... 
        at 
org.apache.sling.launchpad.webapp.SlingServlet.startSling(SlingServlet.java:384)
 
        at 
org.apache.sling.launchpad.webapp.SlingServlet.updated(SlingServlet.java:262) 
        at 
org.apache.sling.launchpad.base.impl.SlingFelix$Notifier.run(SlingFelix.java:172)
 
        at java.lang.Thread.run(Thread.java:761) 
Caused by: javax.naming.NameNotFoundException: Name comp/env/tm not found in 
context "java:". 
        at 
com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal(NameSpace.java:1837) 
        at 
com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1166) 
        at com.ibm.ws.naming.ipbase.NameSpace.lookup(NameSpace.java:1095) 
        at 
com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1235) 
        at 
com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:395) 
        ... 60 more
{code}

According to the JavaEnterprise spec, you should not create threads on your own 
but use the mechanisms of the appserver (mostly because of the massive use of 
threadlocals to access JDNI and stuff like that). See 
http://stackoverflow.com/questions/533783/why-spawning-threads-in-java-ee-container-is-discouraged
 for some discussion of it.

We would like the Launchpad to use a "native Websphere thread" so it can 
actually do JNDI lookups, and not to create a new thread "on the fly". 

We would like to avoid any change to the way how JNDI resources are looked up 
in our application.






--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to