持久化配置问题

Posted

技术标签:

【中文标题】持久化配置问题【英文标题】:Persistence configuration question 【发布时间】:2011-04-01 15:14:01 【问题描述】:

我有一个 Web 应用程序(基于 GWT/Vaadin),到目前为止我是通过

mvn jetty:run

现在我想在另一个 Web 服务器(也是 Jetty)上运行它并遇到数据库连接问题。

在 WAR 文件中没有 persistence.xml 文件。这会是失败的原因吗?

如果是,我应该如何配置持久性,如果

а) 我正在使用 Java DB (Derby),

b) 休眠和

c) 现在配置数据库连接,如下所示

?

提前致谢

德米特里

private void tryToOpenSession(final String aConnectionString)
        throws Throwable 
    ...

    state = PersistenceState.OPENING_CONNECTION;
    final Configuration cnf = new Configuration();
    cnf.setProperty(Environment.DRIVER,
            "org.apache.derby.jdbc.EmbeddedDriver");
    cnf.setProperty(Environment.URL, aConnectionString);
    cnf.setProperty(Environment.DIALECT, DerbyDialect.class.getName());
    cnf.setProperty(Environment.SHOW_SQL, "true");
    cnf.setProperty(Environment.HBM2DDL_AUTO, "update");
    cnf.setProperty(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread");

    cnf.addResource("persistence/Entity1.hbm.xml");
    cnf.addResource("persistence/Entity2.hbm.xml");
    ...
    cnf.addResource("persistence/EntityN.hbm.xml");

    sessionFactory = cnf.buildSessionFactory();

    session = getSession();

    ...

    state = PersistenceState.CONNECTION_OPEN;

UPD:这是一个例外:

java.lang.NoClassDefFoundError:无法初始化类 org.apache.derby.jdbc.EmbeddedDriver 在 java.lang.Class.forName0(本机方法)~[na:1.6.0_20] 在 java.lang.Class.forName(Class.java:186) ~[na:1.6.0_20] 在 org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:80) ~[hibernate-core-3.6.0.Final.jar:3.6.0.Final] 在 org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:143) ~[hibernate-core-3.6.0.Final.jar:3.6.0.Final] 在 org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:84) ~[hibernate-core-3.6.0.Final.jar:3.6.0.Final] 在 org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:459) ~[hibernate-core-3.6.0.Final.jar:3.6.0.Final] 在 org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:91) ~[hibernate-core-3.6.0.Final.jar:3.6.0.Final] 在 org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2833) ~[hibernate-core-3.6.0.Final.jar:3.6.0.Final] 在 org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2829) ~[hibernate-core-3.6.0.Final.jar:3.6.0.Final] 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1840) ~[hibernate-core-3.6.0.Final.jar:3.6.0.Final]

【问题讨论】:

我将堆栈跟踪添加到问题文本中。 你有没有发现这个问题?我有同样的问题。 还没有。我得到了一个建议,不仅要包含 derby.jar 文件,还要包含 derby-tools.jar。我还没试过。 【参考方案1】:

Exception 明确表示在类路径中找不到org.apache.derby.jdbc.EmbeddedDriver 或其某些依赖项。通常需要将需要的jar文件放入/WEB-INF/lib(或者在pom.xml中声明,让Maven自动放入)。

【讨论】:

嗯,在生成的WAR文件中,在pcc.war\WEB-INF\lib\目录下,有一个jar文件derby-10.6.2.1.jar,在org\apache下有EmbeddedDriver.class文件\derby\jdbc\ 目录。为什么没有加载?

以上是关于持久化配置问题的主要内容,如果未能解决你的问题,请参考以下文章

Pyserial 持久化配置

DolphinDB:单节点,配置流数据持久化无效

Jenkins POD重启如何持久化Jenkins配置和插件

如何在 Spring 中持久化配置设置?

FIRApp 配置失败并显示“配置持久深度链接失败”

iptables规则持久化,启动配置