给我一个项目,我必须使其在本地计算机上运行。
实际上,有许多项目可以编译成jar文件,还有一个可以编译到耳朵的主项目,包括这些jar。
该应用程序在WebSphere服务器上运行,尽管运行了,但最终还是出现了有关实体管理器的错误。日志未显示任何内容,但在调试之后,从特定jar的类中调用方法时,出现以下异常:
javax.el.ELException:javax.ejb.EJBException: com.xxx.xxx.managers.xxxManager / entityManager引用的类型 XXXManager组件中的javax.persistence.EntityManager XXXPortal_ear应用程序的xxx-managers.jar模块无法解析。
进一步检查后,我发现IntelliJ将我的persistence.xml标记为一些错误:
<!-- Hibernate -->
<!-- <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"/> -->
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.WebSphereJtaPlatform" />
<property name="hibernate.default_schema" value="XXX_TRANSACTIONS"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect"/>
<property name="hibernate.connection.driver_class" value="com.ibm.db2.jcc.DB2XADataSource"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.default_batch_fetch_size" value="100"/>
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
<!-- OpenJPA -->
<property name="openjpa.jdbc.Schema" value="XXX_TRANSACTIONS"/>
<property name="openjpa.ConnectionDriverName" value="com.ibm.db2.jcc.DB2XADataSource"/>
<property name="openjpa.ConnectionFactoryProperties" value="PrintParameters=True, PrettyPrint=true" />
<property name="openjpa.Log" value="DefaultLevel=DEBUG, Runtime=TRACE, Tool=INFO, Query=TRACE, JDBC=ERROR, SQL=ERROR" />
属性hibernate.default_schema的XXX_TRANSACTIONS值标记为红色,并在屏幕上徘徊:
无法解析架构“ XXX_TRANSACTIONS”
此外,在hibernate.connection.driver_class属性中,值“ com.ibm.db2.jcc.DB2XADataSource”的一部分标记为红色(仅db2.jcc.DB2XADataSource为红色)。
悬停显示:
无法解析类'DB2XADataSource'
我尝试导入db2jcc.jar,但随后得到
com.ibm.db2.jcc.DB2XADataSource'不可分配给'java.sql.Driver'
在驱动程序类属性上。
我可能会在WebSphere配置中弄乱某些内容。
如有需要,我可以提供更多信息。
请帮助。预先感谢。
编辑:
这些是来自persistence.xml的行
<?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="XxxModel">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>XxxDatasource</jta-data-source>
<mapping-file>META-INF/orm.xml</mapping-file>
<class>...
我还将发布WebSphere JDBC提供程序的常规属性:
@Andy Guibert:很遗憾,我无法升级Hibernate版本,当我们重新部署给客户时,这可能会导致问题,因此我无法进行重大更改。
我不得不提到该应用程序可以在另一台机器上运行。它在Rational Application Developer Studio(IBM的Eclipse版本)中打开。我正在尝试在IntelliJ IDEA Ultimate Edition的本地计算机上进行设置。我发现的一个区别是,在我的环境中创建的jar不包含该特定模块的persistence.xml和其他资源文件。我使用了Maven资源插件将其包含在我的jar中:
<resources>
<resource>
<directory>src/main/java/META-INF</directory>
</resource>
</resources>
尽管如此,问题仍然存在,并且在调试时我仍然得到了我在原始帖子中写的异常。
答案 0 :(得分:1)
我相信hibernate.connection.driver_class
属性是您的java.sql.Driver
类的JDBC驱动程序实现类的,但是您列出了com.ibm.db2.jcc.DB2XADataSource
,这是DB2对java.sql.XADataSource
的实现,而不是其java.sql.Driver
的实现。
无论如何,我不建议您在WebSphere上以这种方式配置Hibernate,因为当您配置Hibernate直接查看驱动程序类时,它将绕过WebSphere的连接池,并且您的性能会降低。
相反,我建议在WebSphere中配置一个数据源,然后像下面这样在您的persistence.xml中引用该数据源JNDI名称:
<persistence ...>
<persistence-unit name="SOME_PU" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>jdbc/YOUR_DATASOURCE</jta-data-source>
</persistence-unit>
</persistence>
请注意,从Hibernate 5.2.17.Final开始,Hibernate具有一个新的事务集成类,该类能够与WebSphere(传统或Liberty)事务管理器完全集成。如果您使用的是此版本或更高版本,则无需hibernate.transaction.jta.platform