首页 > 解决方案 > 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>

谢谢

罗伯托

标签: jpawebsphere-libertyopen-liberty

解决方案


推荐阅读