Automatically override eclipselink.target-server for all EclipseLink 
persistence units
--------------------------------------------------------------------------------------

                 Key: OPENEJB-1243
                 URL: https://issues.apache.org/jira/browse/OPENEJB-1243
             Project: OpenEJB
          Issue Type: Improvement
          Components: configuration
    Affects Versions: 3.1.2
         Environment: EclipseLink 2.0.1
OpenEJB 3.1.2
            Reporter: Romain Seguy


This enhancement request aims at extending OPENEJB-881 (Automatically set 
eclipselink.target-server for EclipseLink).

It may happen that some apps built on top of OpenEJB have to reuse as-is 
EclipseLink persistence units that were initially built for other EJB runtimes 
(let's say WebSphere Application Server). In that case, the persistence unit 
would look like this:

---
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd";>
        <persistence-unit name="nxtCommons" transaction-type="JTA">
                
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
                <jta-data-source>jdbc/NXTDataSource</jta-data-source>
                <exclude-unlisted-classes>false</exclude-unlisted-classes>
                <properties>
                        <property name="eclipselink.jdbc.native-sql" 
value="true"/>
                        <property name="eclipselink.logging.level" 
value="FINER"/>
                        <property name="eclipselink.target-database" 
value="Oracle"/>
                        <property name="eclipselink.target-server" 
value="WebSphere"/>
                </properties>
        </persistence-unit>
</persistence>
---

Notice the eclipselink.target-server property set to WebSphere.
Of course, when you directly reuse this PU from OpenEJB, you end up getting the 
following exception because EclipseLink tries to load WebSphere's transaction 
manager:

---
Exception in thread "main" javax.ejb.EJBException: The bean encountered a 
non-application exception; nested exception is: 
        javax.persistence.PersistenceException: Exception [EclipseLink-23004] 
(Eclipse Persistence Services - 2.0.1.v20100213-r6600): 
org.eclipse.persistence.exceptions.TransactionException
Exception Description: Error obtaining the Transaction Manager
Internal Exception: java.lang.ClassNotFoundException: 
com.ibm.ws.Transaction.TransactionManagerFactory
        at 
org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:358)[EL
 Finer]: 2010-03-19 
09:51:51.828--ServerSession(1148404851)--Thread(Thread[main,5,main])--Could not 
initialize Validation Factory. Encountered following exception: 
java.lang.NoClassDefFoundError: javax.validation.ValidatorFactory
[EL Severe]: 2010-03-19 
09:51:51.859--ServerSession(1148404851)--Thread(Thread[main,5,main])--Local 
Exception Stack: 
Exception [EclipseLink-23004] (Eclipse Persistence Services - 
2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.TransactionException
Exception Description: Error obtaining the Transaction Manager
Internal Exception: java.lang.ClassNotFoundException: 
com.ibm.ws.Transaction.TransactionManagerFactory
        at 
org.eclipse.persistence.exceptions.TransactionException.errorObtainingTransactionManager(TransactionException.java:125)
        at 
org.eclipse.persistence.transaction.JTATransactionController.<init>(JTATransactionController.java:69)
...
---

As such, it is mandatory to manually override the eclipselink.target-server 
property for all PUs, for example as follow:

---
Properties p = new Properties();
p.setProperty(Context.INITIAL_CONTEXT_FACTORY, 
"org.apache.openejb.client.LocalInitialContextFactory");
p.put("nxtCommons.eclipselink.target-server", 
"org.apache.openejb.eclipselink.JTATransactionController");
---

==> This would be good if OpenEJB provides an automatic mechanism which would 
override the eclipselink.target-server property of all PUs, particularly if 
these PUs are bundled as JAR files.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to