jpa - Liberty 类加载问题或休眠问题(在 liberty 上迁移 tomcat 应用程序)?
问题描述
我必须在我的 Eclipse 中的 Liberty Server 20 上部署一个多模块应用程序。此应用程序使用 hibernate 作为提供程序 jpa2 和 Derby 客户端 + 驱动程序 derby-10.12.1.1.jar(作为共享文件集)。Persistence.xml 配置了非 jta。这是 server.xml:
<enterpriseApplication id="rubrica-ear" location="rubrica-ear.ear" name="rubrica-ear"/>
<dataSource jndiName="jdbc/TestappDS" type="javax.sql.ConnectionPoolDataSource">
<properties.derby.client createDatabase="false" databaseName=".rubrica"></properties.derby.client>
<jdbcDriver>
<library>
<fileset dir="C:\programmiMio\java-eclipse\drivers" id="shared"></fileset>
</library>
</jdbcDriver>
</dataSource>
我的 .rubrica 数据库位置在 /usr/home。因为我不想在控制台上而是自动启动服务器 derby,所以我在 @WebListener 类中这样做:
@WebListener
public class ReqListener implements ServletContextListener {
static final Logger log = LoggerFactory.getLogger(ReqListener.class);
PrintWriter pw = new PrintWriter(System.out);
private NetworkServerControl derbyserver;
@Override
public void contextInitialized(ServletContextEvent arg0) {
try {
String userHomeDir = System.getProperty("user.home", ".");
String systemDir = userHomeDir + "/.rubrica";
// Set the db system directory and startup Server Derby for incoming connections.
System.setProperty("derby.system.home", systemDir);//il db viene salvato qui
derbyserver = new NetworkServerControl(InetAddress.getByName("localhost"), 1527);
derbyserver.start(pw);
log.info("Apache derby settings ok");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error(e.getMessage());
}
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
if (derbyserver!=null){
...
}
}
当我部署我得到这个错误
[ERROR] An error occurred in the org.hibernate.ejb.HibernatePersistence persistence provider when attempting to create the entity manager factory of the testapp persistence unit container. The following error occurred: java.lang.NullPointerException
at org.hibernate.engine.jdbc.spi.TypeInfo.extractTypeInfo(TypeInfo.java:128)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:163)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:849)
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:67)
at com.ibm.ws.jpa.management.JPAPUnitInfo.createEMFactory(JPAPUnitInfo.java:919)
at [internal classes]
当我在 Liberty 上调试时,我看到 Hibernate 类在 @WebListener 代码之前运行(这在 Tomcat 中不一样),我该如何解决这个问题?关于类加载设置?
我尝试使用 derby Embedded,但在 server.xml 中问题仍然出现:
<properties.derby.embedded createDatabase="create" databaseName="C:/Users/myuser/.rubrica" shutdownDatabase="false"/>
<jdbcDriver>
<library>
<fileset dir="C:\programmiMio\java-eclipse\drivers" id="shared-libs"/>
</library>
</jdbcDriver>
谢谢
罗伯托
解决方案
推荐阅读
- sql - 我在这个 where 语句中做错了什么?
- swift - 当我使用“for”作为 switch 语句的表达式时,Swift 返回一个错误。如何解决这个问题?
- c++ - 用另一个函数(在类中)调用一个函数时出现问题。没有错误代码 C++
- sql - 多重内连接不适用于 MS Excel 中的 SQL 语句
- javascript - 从渲染进程调用的工作人员的 postmessage 到哪里去了?
- react-native - 如何在 React Native 中将 Menu Popup 与 TouchableOpacity 结合起来?
- android - 无法添加窗口 -- 令牌 null 甚至使用 TYPE_SYSTEM_ALERT
- python-3.x - 如何在 aws Lambda 和 python 中打印新行
- django - 写在两个不同的postgres模型上?
- php - 使用 Python 脚本安装 wordpress 插件/主题