0

从 weblogic StartUp 类中的以下代码从 JPA 获取 EntityManagerFactory 时遇到问题


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

    logger.info("Created EntityManagerFactory");

    Context ctx = new InitialContext();

    ctx.rebind("testEJBPU", emf);

上面的代码只返回 OPenJPA EntityManagerFactory 而不是 Hibernate 我的 Presistence.xml 文件中有以下内容


<?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>

并且在应用程序启动时收到以下与 openJPA 相关的错误


<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/../..*

如果有人以前遇到过,请告诉我它的解决方案! 问候,卡齐姆·拉扎。

4

4 回答 4

0

您设置数据源 jdbc/evolvDS 的方式似乎有问题。作为未定义 JDBC 驱动程序名称的例外。你能重新检查你的数据源配置吗?

于 2009-04-14T05:36:55.217 回答
0

您是否在 web.xml 中使用 persistence-unit-ref 引用了持久性单元?

类似的东西

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

于 2009-04-14T06:10:52.640 回答
0

通过扩展HibernatePersistenceProvider's 类解决了这个问题。

于 2009-04-17T06:41:32.010 回答
0

始终在 weblogic 中,您必须选择一个服务器作为目标!. 检查 AdminServer 并找到数据源定义向导的步骤。

于 2021-10-10T12:35:04.960 回答