[ https://issues.apache.org/jira/browse/TOMEE-1580?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14537747#comment-14537747 ]
Nuno G. de M commented on TOMEE-1580: ------------------------------------- HI There, I probably can yes, but not until the weekend. > Datasource JNDI Name Context not available to eclipselink non jta data source > ----------------------------------------------------------------------------- > > Key: TOMEE-1580 > URL: https://issues.apache.org/jira/browse/TOMEE-1580 > Project: TomEE > Issue Type: Bug > Affects Versions: 1.7.1 > Environment: Windows 7, 64 bit, JDK 7 Sun Hotspot > Reporter: Nuno G. de M > Priority: Minor > Labels: JNDI, eclipselink, naming-exception, openejb, > persistence.xml, tomee > Fix For: 1.7.2 > > > Hi, > I am trying to experiement running an application of relative large size on > tomcat ee. The application deploys both to Glassfish 3.1.2.X and weblogic > 12.1.2. - Just to have a reference point as to application compatibility. > When deploying to tomee plume version 1.7.1 one of the problems I have > encountered has to do with the JNDI Naming contexts visible to the > application during deployment. > Namely, the persistence.xml will be telling eclipse link to manage the > generation of new entity sequence numbers using a non JTA data source. > For example, > <persistence-unit name="MY_PU" transaction-type="JTA"> > <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> > <jta-data-source>jdbc/JTA_DS</jta-data-source> > <jar-file>../some.jar</jar-file> <------- this is the first > problem. Was forced to have the ../ added to the jar file > > <exclude-unlisted-classes>false</exclude-unlisted-classes> > <shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode> > <properties> > <property name="eclipselink.logging.level" value="INFO" /> > <property name="eclipselink.logging.level.sql" value="INFO" /> > > <property name="eclipselink.logging.parameters" value="true" /> > <property name="eclipselink.jdbc.sequence-connection-pool" > value="true" /> > <property > name="eclipselink.jdbc.sequence-connection-pool.non-jta-data-source" > value="jdbc/NON_JTA_DS" /> <------------- Eclipse link will get a naming > exception here > </properties> > </persistence-unit> > Ok. > Now with the above "sample" persistence.xml in mind, what happens is the > following. > PROBLEM 1: > The <jar-file> defitnition on the persistence.xml was forced to be tuned with > ../ - whereas in weblogic and glassfish this was not necessary. > The application is bundled in a War file that in the lib/ folder contians all > the WAR dependencies (ejbs and such). One of these jar files - let us call it > my-main.jar is the one that in the classes/META-INF/persistence.xml holds > the persistence.xml referring to all other jars interesting in the /lib/ of > the war file. > Under Tomee this the search for the mentioned jar files that are relevant to > the persistence unit seems to bugy. Since tomee is blowing up with file not > found exception: > my-main.jar/some.jar > And of course he is right. The path he built to find the JAR was not correct > and therefore he could not fild the <jar-file>. > Therefore, here I was forced to put in the <jar-file>../some.jar<jar-file> > to overcome the file not found exception. > PROBLEM 2: > Now the second problem, this is a bit more important, is in the JNDI naming > context themsevels. > Using: > tomee-webaccess-1.7.1/scripting > And the following script: > var pairs = ctx.lookup('java:openejb/Resource/jdbc').list(''); <----- This > is key. > while(pairs.hasMore()) { > println('[entry] ' + pairs.next().getName()); > } > var user = ctx.lookup('java:comp/EJBContext').getCallerPrincipal().getName(); > println("Logged user: '" + user + "'"); > I am able to verify that the two data sources I defined in the tomee.xml are > part of the openejb Resource naming context. > Which is OK. > So the list of names under jdbc/ shows me both the JTA_DS and the NON_JTA_DS. > And indeed the @PersistenceContext inject for the JTA_DS seems to be working > fine. > But eclipse link will blow up when it tries to the JNDI lookup for > jdbc/NON_JTA_DS as listed in the following exception snippet. > Internal Exception: javax.naming.NameNotFoundException: Name > [jdbc/NON_JTA_DS] is not bound in this Context. Unable to find [jdbc]. > at > org.eclipse.persistence.exceptions.EntityManagerSetupException.deployFailed(EntityManagerSetupException.java:229) > ... 58 more > Caused by: Exception [EclipseLink-7060] (Eclipse Persistence Services - > 2.4.2.v20130514-5956486): > org.eclipse.persistence.exceptions.ValidationException > Exception Description: Cannot acquire data source [jdbc/NON_JTA_DS]. > Internal Exception: javax.naming.NameNotFoundException: Name > [jdbc/NON_JTA_DS] is not bound in this Context. Unable to find [jdbc]. > at > org.eclipse.persistence.exceptions.ValidationException.cannotAcquireDataSource(ValidationException.java:502) > at > org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:109) > at > org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162) > at > org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:330) > at > org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:295) > at > org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connect(DatasourceAccessor.java:418) > at > org.eclipse.persistence.sessions.server.ConnectionPool.buildConnection(ConnectionPool.java:216) > at > org.eclipse.persistence.sessions.server.ExternalConnectionPool.startUp(ExternalConnectionPool.java:146) > at > org.eclipse.persistence.internal.sequencing.ServerSessionConnectionHandler.onConnect(ServerSessionConnectionHandler.java:27) > at > org.eclipse.persistence.internal.sequencing.SequencingManager.onConnectInternal(SequencingManager.java:770) > at > org.eclipse.persistence.internal.sequencing.SequencingManager.onConnect(SequencingManager.java:700) > at > org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeSequencing(DatabaseSessionImpl.java:189) > at > org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:583) > at > org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:579) > at > org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:534) > at > org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:782) > at > org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:727) > at > org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:215) > at > org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:554) > ... 56 more > Caused by: javax.naming.NameNotFoundException: Name [jdbc/NON_JTA_DS] is not > bound in this Context. Unable to find [jdbc]. <---------------- OK so > eclipse link is operating in some sort of container context that does no see > the JDBC name > at org.apache.naming.NamingContext.lookup(NamingContext.java:819) > at org.apache.naming.NamingContext.lookup(NamingContext.java:153) > at org.apache.naming.SelectorContext.lookup(SelectorContext.java:133) > at javax.naming.InitialContext.lookup(InitialContext.java:415) > at > org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:103) > ... 73 more > > To me this looks like a serious bug, but you will know better than me the > standard itself and the expectations that an application is allowed to have > on the available naming contexts in the container. > But I was under the impression that regardless of the application module, the > jdbc name should always be visible at the root of the initial naming context. > I am not sure if it will succeed or not, but for the time being I will try to > work around this issue by using the following JNDI name: > java:openejb/Resource/jdbc/NON_JTA_DS > Since i can use the scripting tool the validate that this name can bee > lookedup. > I am not satisfied with the solution - i think of it is a hammer pattern > approach and injection using the easy name : jdbc/NON_JTA_DS should just work. > It works for weblogic and glassfish 3.1.2 at least so I would assume it > should work as well for tomee. > Kindest regards, > And thanks for the support. -- This message was sent by Atlassian JIRA (v6.3.4#6332)