This Bugzilla instance is deprecated, and most Eclipse projects now use GitHub or Eclipse GitLab. Please see the deprecation plan for details.
Bug 246126 - JPA: WLS: EclipseLink Apps Cannot Access App Level DataSources
Summary: JPA: WLS: EclipseLink Apps Cannot Access App Level DataSources
Status: NEW
Alias: None
Product: z_Archived
Classification: Eclipse Foundation
Component: Eclipselink (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Nobody - feel free to take it CLA
QA Contact:
URL: http://wiki.eclipse.org/EclipseLink/E...
Whiteboard:
Keywords:
Depends on:
Blocks: 246271 246272 246774
  Show dependency tree
 
Reported: 2008-09-03 14:30 EDT by Peter Krogh CLA
Modified: 2022-06-09 10:32 EDT (History)
2 users (show)

See Also:
michael.f.obrien: documentation+


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Peter Krogh CLA 2008-09-03 14:30:14 EDT
 
Comment 1 Michael OBrien CLA 2008-09-03 15:15:58 EDT
Globally defined datasources are working fine on WebLogic, however application defined datasource are not available during predeploy.

Need to 
1) verify the order of operations for DS definition
2) reproduce the exception during JPA app predeploy using the following example that is currently configured to run off a server defined global DS.

http://wiki.eclipse.org/EclipseLink/Examples/JPA/WebLogic_Web_Tutorial#JNDI_Datasource_Setup
Comment 2 Michael OBrien CLA 2008-09-03 15:55:41 EDT
I have seen this error message before.
I am getting the following message that does not state the problem correctly - the DS is not defined - but the jtaDataSource element is defined in persistence.xml - it just does not resolve...
when i either...
1) enter an invalid DS name - one that does not exist
2) one defined locally scope=Application in the ear/META-INF/weblogic-application.xml

Exception [EclipseLink-28010] (Eclipse Persistence Services - 1.1 (Build SNAPSHOT - 20080725)): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: PersistenceUnitInfo unified has transactionType JTA, but doesnt have jtaDataSource.
	at org.eclipse.persistence.exceptions.EntityManagerSetupException.jtaPersistenceUnitInfoMissingJtaDataSource(EntityManagerSetupException.java:154)
	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:790)
	at org.eclipse.persistence.jpa.PersistenceProvider.createContainerEntityManagerFactory(PersistenceProvider.java:189)
	at weblogic.deployment.PersistenceUnitInfoImpl.createEntityManagerFactory(PersistenceUnitInfoImpl.java:320)
	at weblogic.deployment.PersistenceUnitInfoImpl.<init>(PersistenceUnitInfoImpl.java:124)
Comment 3 Michael OBrien CLA 2008-09-03 22:15:30 EDT
In predeploy() we are failing because the supplied jtaDataSource is null in the check below...
persistenceUnitInfo.getJtaDataSource() == null
...for both misspelled or misconfigured sources


            if (!isValidationOnly(predeployProperties, false) && persistenceUnitInfo != null && transactionType == PersistenceUnitTransactionType.JTA) {
                if (predeployProperties.get(PersistenceUnitProperties.JTA_DATASOURCE) == null && persistenceUnitInfo.getJtaDataSource() == null) {
                    throw new PersistenceException(EntityManagerSetupException.jtaPersistenceUnitInfoMissingJtaDataSource(persistenceUnitInfo.getPersistenceUnitName()));
Comment 4 Michael OBrien CLA 2008-09-03 22:21:34 EDT

Q) Are we sure that the EAR is configured properly - as the ds is showing as 
null when we get to predeploy() - the same as if I misspelled it. 
According to BEA documentation we must configure the following as well to 
bind the ejb module to the ds defined in the ear. 
 
http://edocs.bea.com/wls/docs81/ConsoleHelp/jdbc_connection_pools.html#1108839 
http://edocs.beasys.com/wls/docs90/jdbc_admin/packagedjdbc.html#get_connection 
 

weblogic-application.xml  - set to.... 
   <module><name>localOracle10RemoteDS</name><type>JDBC</type> 
    <path>META-INF/oracle-jdbc.xml</path></module> 
 
ejb-jar.xml - missing ref 
weblogic-ejb-jar.xml - missing 
web.xml - not used 
weblogic.xml - missing 
 
@ >Test 1: 
--------------------------------- 
I put a break point at the start of predeploy - with a purposely broken 
application context ds - I get the weblogic log on not-resolving the URL 
before I entered predeploy (Note I get it after predeploy completes - If I 
reference a global ds - while still containting an application ds - as Chris suggested) 

Daemon Thread [Thread-26] (Suspended (breakpoint at line 684 in EntityManagerSetupImpl))	
	EntityManagerSetupImpl.predeploy(PersistenceUnitInfo, Map) line: 684	
	PersistenceProvider.createContainerEntityManagerFactory(PersistenceUnitInfo, Map) line: 189	
	PersistenceUnitInfoImpl.createEntityManagerFactory() line: 320	
	PersistenceUnitInfoImpl.<init>(PersistenceUnitBean, PersistenceUnitConfigurationBean, GenericClassLoader, String, URL, URL) line: 124	
	ModulePersistenceUnitRegistry(AbstractPersistenceUnitRegistry).storeDescriptors(Map, Map) line: 331	
	ModulePersistenceUnitRegistry(AbstractPersistenceUnitRegistry).loadPersistenceDescriptor(VirtualJarFile, boolean, File) line: 245	
	ModulePersistenceUnitRegistry.<init>(GenericClassLoader, ApplicationContextInternal, Module, boolean) line: 63	
	EJBModule.setupPersistenceUnitRegistry() line: 202	
	EJBModule.prepare() line: 351	
	ModuleListenerInvoker.prepare() line: 93	
	DeploymentCallbackFlow$1.next(Object) line: 384	
	StateMachineDriver$ParallelChange$1.run() line: 71	
	AuthenticatedSubject.doAs(AbstractSubject, PrivilegedAction) line: 321	
	SecurityManager.runAs(AuthenticatedSubject, AuthenticatedSubject, PrivilegedAction) line: not available	
	StateMachineDriver$ParallelChange.run() line: 67	
	Thread.run() line: 619	

<Sep 3, 2008 8:55:42 PM EDT> <Warning> <JDBC> <BEA-001129> <Received exception while creating connection for pool "localOracle10RemoteDS": [BEA][Oracle JDBC Driver][Oracle]ORA-12505 Connection refused, the specified SID (orcl2) was not recognized by the Oracle server.> 

weblogic.deployment.PersistenceUnitInfoImpl@461f7c
info	PersistenceUnitInfoImpl  (id=76)	
	cl	GenericClassLoader  (id=97)	
	configDD	null	
	dd	PersistenceUnitBeanImpl  (id=101)	
	emf	null	
	jarFileUrls	ArrayList<E>  (id=109)	
	jarParentUrl	URL  (id=111)	
	jtaDataSource	null	
	nonJtaDataSource	null	
	parentMBean	null	
	persistenceUnitId	"_appsdir_weblogicEAR22_ear#weblogicEJB2.jar#unified#unified" (id=120)	
	
	

[EL Finest]: 2008.09.03 21:02:49.620--ServerSession(6555608)--Thread(Thread[Thread-26,5,Pooled Threads])--Begin predeploying Persistence Unit unified; state Initial; factoryCount 0

Daemon Thread [Thread-26] (Suspended)	
	EJBModule.prepare() line: 417 [local variables unavailable]	
	ModuleListenerInvoker.prepare() line: 93	
	DeploymentCallbackFlow$1.next(Object) line: 384	
	StateMachineDriver$ParallelChange$1.run() line: 71	
	AuthenticatedSubject.doAs(AbstractSubject, PrivilegedAction) line: 321	
	SecurityManager.runAs(AuthenticatedSubject, AuthenticatedSubject, PrivilegedAction) line: not available	
	StateMachineDriver$ParallelChange.run() line: 67	
	StateMachineDriver$ParallelChange.run() line: 67	


>Test 2: for reference I set a breakpoint on a working global DS 
--------------------------------------------------------------- 


[Global]

info	PersistenceUnitInfoImpl  (id=85)	
	cl	GenericClassLoader  (id=98)	
	configDD	null	
	dd	PersistenceUnitBeanImpl  (id=111)	
	emf	null	
	jarFileUrls	ArrayList<E>  (id=115)	
	jarParentUrl	URL  (id=120)	
	jtaDataSource	RmiDataSource  (id=102)	
		appName	null	
		classLoader	null	
		driverClass	"weblogic.jdbc.jta.DataSource" (id=144)	
		driverInstance	DataSource  (id=147)	
		driverProps	ConcurrentProperties  (id=152)	
		driverUrl	"jdbc:weblogic:jta:oracle10RemoteDS" (id=154)	
		isLoggingResource	false	
		jdbcCtx	WLEventContextImpl  (id=155)	
		jndiNames	String[1]  (id=157)	
		jtaRegistrationName	"oracle10RemoteDS" (id=159)	
		moduleName	null	
		pa	null	
		poolName	"oracle10RemoteDS" (id=159)	
		rmiSettings	RmiDriverSettings  (id=169)	
		scope	"Global" (id=171)	
		txDataSource	true	
		useDriver	true	
		verbose	false	
	nonJtaDataSource	RmiDataSource  (id=102)	
		appName	null	
		classLoader	null	
		driverClass	"weblogic.jdbc.jta.DataSource" (id=144)	
		driverInstance	DataSource  (id=147)	
		driverProps	ConcurrentProperties  (id=152)	
		driverUrl	"jdbc:weblogic:jta:oracle10RemoteDS" (id=154)	
		isLoggingResource	false	
		jdbcCtx	WLEventContextImpl  (id=155)	
		jndiNames	String[1]  (id=157)	
		jtaRegistrationName	"oracle10RemoteDS" (id=159)	
		moduleName	null	
		pa	null	
		poolName	"oracle10RemoteDS" (id=159)	
		rmiSettings	RmiDriverSettings  (id=169)	
		scope	"Global" (id=171)	
		txDataSource	true	
		useDriver	true	
		verbose	false	
	parentMBean	null	
	persistenceUnitId	"_appsdir_weblogicEAR25_ear#weblogicEJB2.jar#unified#unified" (id=133)	
	properties	Properties  (id=137)	
	rootUrl	URL  (id=139)	
	runtimeMBean	null	


using 
    <persistence-unit name="unified" transaction-type="JTA"> 
         <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
         <jta-data-source>localOracle10RemoteDS</jta-data-source> 
         <non-jta-data-source>localOracle10RemoteDS</non-jta-data-source>     
    


Synopsis: 
-------------------------- 
The global oracle-ds.xml file looks the same as the local one. 
However, I dont use the normal jdbc/OracleDS, I use just "OracleDS" 
Q) Did you guys change the ds ref name when switching from global to local 
 
I am still in the process of getting an application scoped ds working. 
This bug needs to differentiate between 
1) A misspelled or not fully configured (referenced) datasource 
2) An actual bug on the weblogic or eclipselink side 
 
- it looks like if 1) is setup correctly then it would be on the weblogic 
side since we are supposed to be supplied with a fully populated 
PeristenceUnitInfo object from the weblogic container by contract. 
	
Comment 5 Michael OBrien CLA 2008-09-03 23:08:02 EDT
Configure your app according to the following graphic
http://download.oracle.com/docs/cd/E11035_01/wls100/jdbc_admin/packagedjdbc.html#wp1053852
Comment 6 Michael OBrien CLA 2008-09-04 08:50:02 EDT
I am going to test a jndi lookup via a standalone servlet or session bean and then test kodo - so we can verify that the application-context jdbc module is configured properly
Comment 7 Michael OBrien CLA 2008-09-04 15:08:46 EDT
    The configuration looks fine because If I purposely break the SID on the application context datasource - WebLogic Server emits logs and exceptions.
    However, if i try to use the app context datasource (same settings as the working Global one) - then WebLogic Server does not complain but sends us a null jtaDataSource inside a PersistenceUnitInfoImpl at first contact with predeploy() in eclipseLink - we have not control over this null datasource.

Details:
-------------
    WebLogic server is not populating PersistenceUnitInfo with the jtaDataSource - it is coming in EclipseLink as null.


A) 1st Point of entry between WebLogic and EclipseLink is in createContainerEntityManagerFactory before predeploy.

Daemon Thread [Thread-26] (Suspended (breakpoint at line 175 in PersistenceProvider)) 
 PersistenceProvider.createContainerEntityManagerFactory(PersistenceUnitInfo, Map) line: 175 
 PersistenceUnitInfoImpl.createEntityManagerFactory() line: 320 
 PersistenceUnitInfoImpl.<init>(PersistenceUnitBean, PersistenceUnitConfigurationBean, GenericClassLoader, String, URL, URL) line: 124 
 ModulePersistenceUnitRegistry(AbstractPersistenceUnitRegistry).storeDescriptors(Map, Map) line: 331 
 ModulePersistenceUnitRegistry(AbstractPersistenceUnitRegistry).loadPersistenceDescriptor(VirtualJarFile, boolean, File) line: 245 
 ModulePersistenceUnitRegistry.<init>(GenericClassLoader, ApplicationContextInternal, Module, boolean) line: 63 
 EJBModule.setupPersistenceUnitRegistry() line: 202 
 EJBModule.prepare() line: 351 
 ModuleListenerInvoker.prepare() line: 93 
 DeploymentCallbackFlow$1.next(Object) line: 384 

This is what we want (from a Global datasource)
info PersistenceUnitInfoImpl  (id=85) 
     cl GenericClassLoader  (id=98) 
     configDD null 
     dd PersistenceUnitBeanImpl  (id=111) 
     emf null 
     jarFileUrls ArrayList<E>  (id=115) 
     jarParentUrl URL  (id=120) 
     jtaDataSource RmiDataSource  (id=102) 
          appName null 
          classLoader null 
          driverClass "weblogic.jdbc.jta.DataSource" (id=144) 
          driverInstance DataSource  (id=147) 
          driverProps ConcurrentProperties  (id=152) 
          driverUrl "jdbc:weblogic:jta:oracle10RemoteDS" (id=154) 
          isLoggingResource false 
          jdbcCtx WLEventContextImpl  (id=155) 
          jndiNames String[1]  (id=157) 
          jtaRegistrationName "oracle10RemoteDS" (id=159) 
          moduleName null 
          pa null 
          poolName "oracle10RemoteDS" (id=159) 
          rmiSettings RmiDriverSettings  (id=169) 
          scope "Global" (id=171) 
          txDataSource true 
          useDriver true 


This is what we see:  
weblogic.deployment.PersistenceUnitInfoImpl@dab72a 
info PersistenceUnitInfoImpl  (id=82) 
     cl GenericClassLoader  (id=95) 
     configDD null 
     dd PersistenceUnitBeanImpl  (id=99) 
     emf null 
     jarFileUrls ArrayList<E>  (id=101) 
     jarParentUrl URL  (id=103) 
null-----> jtaDataSource null 
     nonJtaDataSource null 
     parentMBean null 
     persistenceUnitId "_appsdir_weblogicEAR53_ear#weblogicEJB2.jar#unified#unified" (id=105) 
     properties Properties  (id=107) 
     rootUrl URL  (id=109) 
     runtimeMBean null 
 
B) see the following method in weblogic.jar that should either create a non-null jtaDataSource, or throw a warning if the configuration is wrong

EJBModule {
 private void initJNDIContext(); 
 

C) When we get to the point of the EclipseLink exception we are just responding the the fact that the passed in puInfo.jtaDataSource is null

public class EntityManagerSetupImpl {
    public synchronized ClassTransformer predeploy(PersistenceUnitInfo info, Map extendedProperties) {
                if (predeployProperties.get(PersistenceUnitProperties.JTA_DATASOURCE) == null && persistenceUnitInfo.getJtaDataSource() == null) {

>outputs
Exception Description: PersistenceUnitInfo unified has transactionType JTA, but doesnt have jtaDataSource.

Daemon Thread [Thread-26] (Suspended (breakpoint at line 789 in EntityManagerSetupImpl)) 
 EntityManagerSetupImpl.predeploy(PersistenceUnitInfo, Map) line: 789 
 PersistenceProvider.createContainerEntityManagerFactory(PersistenceUnitInfo, Map) line: 189 
 PersistenceUnitInfoImpl.createEntityManagerFactory() line: 320 
 PersistenceUnitInfoImpl.<init>(PersistenceUnitBean, PersistenceUnitConfigurationBean, GenericClassLoader, String, URL, URL) line: 124 
 ModulePersistenceUnitRegistry(AbstractPersistenceUnitRegistry).storeDescriptors(Map, Map) line: 331 
 ModulePersistenceUnitRegistry(AbstractPersistenceUnitRegistry).loadPersistenceDescriptor(VirtualJarFile, boolean, File) line: 245 
 ModulePersistenceUnitRegistry.<init>(GenericClassLoader, ApplicationContextInternal, Module, boolean) line: 63 
 EJBModule.setupPersistenceUnitRegistry() line: 202 [local variables unavailable] 
 ModuleListenerInvoker.prepare() line: 93 
 DeploymentCallbackFlow$1.next(Object) line: 384 
 StateMachineDriver$ParallelChange$1.run() line: 71 
 AuthenticatedSubject.doAs(AbstractSubject, PrivilegedAction) line: 321 
 SecurityManager.runAs(AuthenticatedSubject, AuthenticatedSubject, PrivilegedAction) line: not available 
 StateMachineDriver$ParallelChange.run() line: 67 
 StateMachineDriver$ParallelChange.run() line: 67 
 Thread.run() line: 619 


D) To test this theory, I will purposely break the SID of an application-context datasource - we see the error message - and the resulting null jtaDataSource.
However, if the app-context ds is ok - we just get null from WebLogic.

modify
C:\wse\w34\weblogicEAR\EarContent\META-INF\oracle-jdbc.xml
referenced by
weblogic-application.xml

from
<jdbc-data-source xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-jdbc.xsd" xmlns="http://www.bea.com/ns/weblogic/jdbc-data-source">
  <name>localOracle10RemoteDS</name>
  <jdbc-driver-params>
...   <property>
        <name>SID</name>
        <value>orcl</value>
to
        <name>SID</name>
        <value>orcl_broken</value>


E) Results of a purposly broken application context datasource


<Sep 4, 2008 2:39:33 PM EDT> <Warning> <JDBC> <BEA-001129> <Received exception while creating connection for pool "localOracle10RemoteDS": [BEA][Oracle JDBC Driver][Oracle]ORA-12505 Connection refused, the specified SID (orcl_broken) was not recognized by the Oracle server.> 
[EL Finest]: 2008.09.04 14:40:16.207--ServerSession(28272629)--Thread(Thread[Thread-30,5,Pooled Threads])--Begin predeploying Persistence Unit unified; state Initial; factoryCount 0

weblogic.common.ResourceException: [BEA][Oracle JDBC Driver][Oracle]ORA-12505 Connection refused, the specified SID (orcl_broken) was not recognized by the Oracle server.
 at weblogic.jdbc.common.internal.XAConnectionEnvFactory.makeConnection(XAConnectionEnvFactory.java:454)
 at weblogic.jdbc.common.internal.XAConnectionEnvFactory.createResource(XAConnectionEnvFactory.java:154)
 at weblogic.common.resourcepool.ResourcePoolImpl.makeResources(ResourcePoolImpl.java:1109)
 at weblogic.common.resourcepool.ResourcePoolImpl.makeResources(ResourcePoolImpl.java:1033)
 at weblogic.common.resourcepool.ResourcePoolImpl.start(ResourcePoolImpl.java:214)
Caused by: weblogic.common.ResourceException: Unknown Data Source localOracle10RemoteDS
 at weblogic.jdbc.common.internal.ConnectionPoolManager.shutdownConnectionPool(ConnectionPoolManager.java:491)
 at weblogic.jdbc.common.internal.ConnectionPoolManager.shutdownAndDestroyPool(ConnectionPoolManager.java:466)
 at weblogic.jdbc.module.JDBCModule.unprepare(JDBCModule.java:414)


before we get to predeploy() where the jtaDataSource is null - which we are not able to use - so we report it.
Note: the error message needs to be split in a separate bug to differentiate between whether the user did not have a <jta-data-source> element - or the datasource was invalid - since this check is performed on the server we treat both the same.

Results:
The application context datasource is configured (as is evident if I try to break it), it is just not populated in PersistenceUnitInfoImpl or is not associated property with the pu.

Synopsis:
-------------
The PersistenceUnitInfoImpl passed/populated by the WebLogic server in EJBModule.setupPersistenceUnitRegistry() 
is coming in with a null datasource - EclipseLink expects that this datasource was correctly loaded by the server.

This may be a WebLogic server issue within EJBModule.initJNDIContext() in weblogic.jar.


thank you
/michael
Comment 9 Michael OBrien CLA 2008-09-08 13:08:06 EDT
Everyone,
	I have a temporary workaround - until we determine why PersistenceUnitInfoImpl.jtaDataSource is null from the weblogic server before predeploy()
	It involves using the javax.persistence.jta|nonJtaDataSource properties to do our own JNDI lookup of the DS
	The result is that the JPA application can use the oracle-jdbc.xml application DS packaged with the EAR and not rely on a global DS.


Details:

Workaround for null PersistenceUnitInfoImpl.jtaDataSource from wls server - use the javax.*DataSource properties to to our own JNDI lookup in JNDIConnector in deploy() after a bypassed predeploy()
- setting these two properties will allow the predeploy to continue
- when we actually do a crud operation on the em - we will do a JNDI lookup using this jndi property name at that time.

weblogicEAR/EarContent/META-INF/oracle-jdbc.xml
-----------------------------------------------
- comment out the Application scope and default to Global (this ds becomes application defined but globally available) - may be just my config though
<!-- scope>Application</scope--> 


weblogicEJB/ejbModule/META-INF/peristence.xml
---------------------------------------------
- Add the two non-standard javax.persistence.*DataSource properties - so we can bypass the null ds passed by the server in PersistenceUnitInfo

<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="unified" transaction-type="JTA">
         <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
         <jta-data-source>localOracle10RemoteDS</jta-data-source>
         <!-- jta-data-source>oracle10RemoteDS</jta-data-source-->
              <properties>
                <property name="javax.persistence.jtaDataSource" value="localOracle10RemoteDS"/>
                <property name="javax.persistence.nonJtaDataSource" value="localOracle10RemoteDS"/>


logs:
--------------
[EL Finest]: 2008.09.08 12:48:16.653--ServerSession(18397823)--Thread(Thread[[ACTIVE] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)',5,Pooled Threads])--property=javax.persistence.jtaDataSource; value=localOracle10RemoteDS
[EL Finest]: 2008.09.08 12:48:16.653--ServerSession(18397823)--Thread(Thread[[ACTIVE] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)',5,Pooled Threads])--property=javax.persistence.nonJtaDataSource; value=localOracle10RemoteDS

[EL Config]: 2008.09.08 12:48:19.200--ServerSession(18397823)--Connection(26836802)--Thread(Thread[[ACTIVE] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)',5,Pooled Threads])--connecting(DatabaseLogin(
	platform=>DatabasePlatform
	user name=> ""
	connector=>JNDIConnector datasource name=>localOracle10RemoteDS
))
[EL Config]: 2008.09.08 12:48:20.403--ServerSession(18397823)--Connection(31059213)--Thread(Thread[[ACTIVE] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)',5,Pooled Threads])--Connected: jdbc:bea:oracle://10.x:1521;CATALOGOPTIONS=2;CONNECTIONRETRYDELAY=1;SUPPORTLINKS=false;MAXPOOLEDSTATEMENTS=0;KEYSTORE=;ENABLECANCELTIMEOUT=false;TRUSTSTOREPASSWORD=;VALIDATESERVERCERTIFICATE=true;CODEPAGEOVERRIDE=;REFCURSORSUPPORT=true;KEYSTOREPASSWORD=;CONNECTIONRETRYCOUNT=5;SENDFLOATPARAMETERSASSTRING=false;COMMITBEHAVIOR=serverDefault;TNSSERVERNAME=;BATCHPERFORMANCEWORKAROUND=false;INITIALIZATIONSTRING=;RESULTSETMETADATAOPTIONS=0;QUERYTIMEOUT=0;HOSTNAMEINCERTIFICATE=;WIREPROTOCOLMODE=1;CATALOGINCLUDESSYNONYMS=true;JAVADOUBLETOSTRING=false;LOADLIBRARYPATH=;IMPORTSTATEMENTPOOL=;ALTERNATESERVERS=;KEYPASSWORD=;ENCRYPTIONMETHOD=noEncryption;CONVERTNULL=1;TRUSTSTORE=;TNSNAMESFILE=;AUTHENTICATIONMETHOD=auto;SERVICENAME=;SERVERTYPE=;LOADBALANCING=false;SID=orcl;WORKAROUNDS=0;INSENSITIVERESULTSETBUFFERSIZE=2048;SYSLOGINROLE=;FETCHTSWTZASTIMESTAMP=false
	User: Sxxxx
	Database: Oracle  Version: 10.2.0.1.0
	Driver: Oracle  Version: 3.70.26 (029619.012905.019214)
[EL Fine]: 2008.09.08 12:48:21.153--ServerSession(18397823)--Connection(5171053)--Thread(Thread[[ACTIVE] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)',5,Pooled Threads])--SELECT ID, DATE_STAMP FROM STAT_LABEL
Object: org.eclipse.persistence.example.unified.business.StatLabel@c4a57c
Object: org.eclipse.persistence.example.unified.business.StatLabel@129ca4e
Comment 10 Michael OBrien CLA 2008-09-08 14:38:42 EDT
ejb-3_0-fr-spec-persistence.pdf specification reference:

The javax.persistence.jtaDataSource property workaround in addition to specifying <jta-data-source> is defined  in section 7.1.3.1

The <jta-data-source> element definition in the spec states support for the "global JNDI" name - this assumes that the spec is differentiating global/application scope in a JNDI context and not "global as in global to the pu or application".
 
"6.2.1.5 jta-data-source, non-jta-data-source
In Java EE environments, the jta-data-source and non-jta-data-source elements are used to specify the global JNDI name of the JTA and/or non-JTA data source to be used by the persistence provider. If neither is specified, the deployer must specify a JTA data source at deployment or a JTA data source must be provided by the container, and a JTA EntityManagerFactory will be created to correspond to it."

Comment 11 Michael OBrien CLA 2008-09-09 15:42:13 EDT
Workaround adjustment: javax property now uses application scope ds.
The following change suggested by Matt to the workaround where the
javax.persistence.jtaDataSource property value is
"java:/app/jdbc/yourdatasource" allows us to keep the
<scope>Application</scope> scope in the ds module 
- thanks Matt.

oracle-jdbc.xml
  <jdbc-data-source-params>
    <jndi-name>appDS</jndi-name>
    <scope>Application</scope>

persistence.xml
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="unified" transaction-type="JTA">
         <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
         <jta-data-source>localOracle10RemoteDS</jta-data-source>
              <properties>
--->              <property name="javax.persistence.jtaDataSource"
value="java:app/jdbc/appDS"/>


[EL Fine]: 2008.09.09
11:08:14.710--ClientSession(14277544)--Connection(25865672)--Thread(Thread[[ACTIVE]
ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)',5,Pooled
Threads])--INSERT INTO STAT_LABEL (ID, DATE_STAMP) VALUES (?, ?)
        bind => [1001, 2009-09-09]


Issue:
   The jta-data-source is always overriden by the datasource in
javax.persistence.jtaDataSource - A documentation wiki is required on usage of
this alternate property.

Comment 12 Michael OBrien CLA 2008-09-09 15:46:51 EDT
This bug is waiting on a possible WebLogic Application Server fix in EJBModule.initJNDIContext()
Moved to: unassigned for 1.1 release
Comment 13 Michael OBrien CLA 2008-09-10 09:23:11 EDT
7366474
Comment 14 Michael OBrien CLA 2008-11-18 10:59:53 EST
Moving to 2.0 (server fix is assigned).
We have the following workaround until then.
http://wiki.eclipse.org/EclipseLink/Examples/JPA/WLS_AppScoped_DataSource
Comment 15 Michael OBrien CLA 2009-01-21 11:07:55 EST
Underlying JNDI validation error on the server is fixed in post load 12 - we need to verify the fix and/or deprecate the workaround
Comment 16 Michael OBrien CLA 2009-03-12 13:33:37 EDT
Reverifying behavior with load14
Comment 17 Michael OBrien CLA 2009-03-12 18:39:18 EDT
Latest WLS load still requires the javax property workaround.
>Also, we now require that a JTA datasource is transactional.

*jdbc.xml must be modified as follows
    <!--driver-name>oracle.jdbc.OracleDriver</driver-name-->
    <driver-name>oracle.jdbc.xa.client.OracleXADataSource</driver-name>

Comment 18 Tom Ware CLA 2009-04-16 11:06:08 EDT
Updating priority due to revised bug categorization process.  See the following page for details:

http://wiki.eclipse.org/EclipseLink/Development/Bugs/Guidelines#Priority_and_Target_Milestone 

If you feel the updated priority is incorrect, please send an email to eclipselink-users@eclipse.org.
Comment 19 Michael OBrien CLA 2009-10-06 09:44:30 EDT
>This workaround needs to be verified as fixed in the 1 July 2009 release of 11gR1
Comment 20 Michael OBrien CLA 2010-07-06 12:48:56 EDT
>Reverify against latest release
Comment 21 Eclipse Webmaster CLA 2022-06-09 10:32:13 EDT
The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink