views:

3048

answers:

4

I am facing an issue when am getting the EntityManagerFactory from JPA from the following code in weblogic StartUp Class


    EntityManagerFactory emf =
        Persistence.createEntityManagerFactory("testEJBPU");

    logger.info("Created EntityManagerFactory");

    Context ctx = new InitialContext();

    ctx.rebind("testEJBPU", emf);


The above code is only returning the OPenJPA EntityManagerFactory instead of the Hibernate's I have the following in my Presistence.xml file


<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2006 Illuminatics, Inc.
All rights reserved.
-->

<persistence 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"
             version="1.0">
    <persistence-unit name="testEJBPU" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>jdbc/evolvDS</jta-data-source>
        <properties>
            <property name="hibernate.ejb.cfgfile"
                      value="META-INF/hibernate.cfg.xml"/>
            <property name="hibernate.transaction.factory_class"
                      value="org.hibernate.ejb.transaction.JoinableCMTTransactionFactory"/>
            <property name="hibernate.transaction.manager_lookup_class"
                      value="org.hibernate.transaction.WeblogicTransactionManagerLookup"/>
            <property name="hibernate.cache.provider_class"
                      value="org.hibernate.cache.EhCacheProvider"/>
            <property name="hibernate.cache.jndi"
                      value="evolv-cache"/>
        </properties>
    </persistence-unit>
</persistence>


and am getting the following error which is related to openJPA when application starts up


<Apr 14, 2009 9:48:18 AM PKT> <Critical> <WebLogicServer> <BEA-000286> <Failed to invoke startup class "binder", <1.0.0 fatal user error> org.apache.openjpa.util.UserException: A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property.
<1.0.0 fatal user error> org.apache.openjpa.util.UserException: A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property.
    at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:70)
    at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:802)
    at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:568)
    at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1185)
    at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:450)
    at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:375)
    at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:102)
    at kodo.conf.CachingMetaDataRepositoryPlugin.instantiate(CachingMetaDataRepositoryPlugin.java:29)
    at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:79)
    at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:833)
    at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:828)
    at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:539)
    at org.apache.openjpa.kernel.AbstractBrokerFactory.readResolve(AbstractBrokerFactory.java:381)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1033)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1728)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
    at weblogic.rmi.extensions.server.CBVInputStream.readObjectInternal(CBVInputStream.java:71)
    at weblogic.rmi.extensions.server.CBVInputStream.readObject(CBVInputStream.java:65)
    at weblogic.jndi.internal.JNDIHelper.copyObject(JNDIHelper.java:36)
    at weblogic.jndi.internal.WLEventContextImpl.copyObject(WLEventContextImpl.java:379)
    at weblogic.jndi.internal.WLEventContextImpl.rebind(WLEventContextImpl.java:114)
    at javax.naming.InitialContext.rebind(InitialContext.java:367)
    at com.illuminatics.test.weblogic.EntityManagerFactoryBinder.main(EntityManagerFactoryBinder.java:52)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at weblogic.management.deploy.classdeployment.ClassDeploymentManager.invokeMain(ClassDeploymentManager.java:353)
    at weblogic.management.deploy.classdeployment.ClassDeploymentManager.invokeClass(ClassDeploymentManager.java:263)
    at weblogic.management.deploy.classdeployment.ClassDeploymentManager.access$000(ClassDeploymentManager.java:54)
    at weblogic.management.deploy.classdeployment.ClassDeploymentManager$1.run(ClassDeploymentManager.java:205)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    at weblogic.management.deploy.classdeployment.ClassDeploymentManager.invokeClassDeployment(ClassDeploymentManager.java:198)
    at weblogic.management.deploy.classdeployment.ClassDeploymentManager.invokeClassDeployments(ClassDeploymentManager.java:177)
    at weblogic.management.deploy.classdeployment.ClassDeploymentManager.runStartupsAfterAppActivation(ClassDeploymentManager.java:158)
    at weblogic.management.deploy.classdeployment.StartupClassPrelistenService.start(StartupClassPrelistenService.java:13)
    at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)
>


My EAR Structure is as:

testEJBProject.ear 
-->lib/ 
-->META-INF/ 
----->application.xml 
----->MANIFEST.MF 
-->testEJB.jar 
----->META-INF/ 
--------->hibernate.cfg.xml 
--------->INDEX.LST 
--------->MANIFEST>MF 
--------->persistence.xml 
----->com/../..*

Kindly Let me know its solution if anyone has encountered it before! Regards, Kazim Raza.

A: 

Looks like something wrong with the way you have setup your datasource jdbc/evolvDS. As the exception saying JDBC driver name is not defined. Can you re-check your datasource config.

Bhushan
If you look at the origin of the Exception it is comming from the OPenJPA instead of the Hibernate as I have set the Provider to "org.hibernate.ejb.HibernatePersistence" in my persistence.xml file that means it has to ask Hibernate instead of OpenJPA for Factory Strange!!
Am sure that the weblogic EJB container is unable to find my persistence.xml file on its classpath that is why its not picking up the <provider> tag! do we need to mention any where the path to persistence.xml??
A: 

Did you reference the persistence unit with persistence-unit-ref in the web.xml ?

something like that

<persistence-unit-ref> <persistence-unit-ref-name>persistence/testEJBPU</persistence-unit-ref-name> ... <persistence-unit-ref>

MahdeTo
Kindly see the .ear structure of my test EJB I have updated in my question ..
A: 

Thanks, The Issue is fixed by Extending the HibernatePersistenceProvider's class

Regards, Kazim Raza.

A: 

We have a comparable issue with a Weblogic/Spring/Hibernate deployment.

Can you tell us what has to be done in the extended HibernatePersitenceProvider class?

Thanks, Angela Sindic.