【问题标题】:Hibernate Connection using C3P0 and Postgresql使用 C3P0 和 Postgresql 的休眠连接
【发布时间】:2011-04-28 16:49:55
【问题描述】:

我正在尝试使用 postgresql 和 glassfish 启动并运行应用程序(jadasite)。应用程序设计者推荐 tomcat 和 mysql。对于这个应用程序 atm,我不能真正使用 tomcat 和 mysql。该应用程序使用 JPA,因此 postgresql 应该没有问题。设计师确实提到 postgresql/许多其他数据库应该可以工作。

这就是我所做的,使用以下两页作为参考:

Hibernate Docs

Jadasite forums

jada.properties

log4j.directory=/tmp
hibernate.connection.password=password
working.directory=/tmp
encryption.key=fVOew3eAhr+hdZ9eQLeEtw\=\=
hibernate.connection.url=jdbc\:postgresql:dev-rdbms.example.com:5432/jada"/>
hibernate.connection.driver_class=org.postgresql.drivers

persistence.xml(parital)

<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.connection.username" value="jada"/>
<property name="hibernate.connection.password" value="password"/>
<property name="hibernate.connection.url" value="jdbc:postgresql://dev-rdbms.example.com:5432/jada>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.current_session_context_class" value="thread"/>
<property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/

然后我使用 mysql2psql 制作了一个与 postgresql 兼容的数据库转储,加载了所有数据并创建了具有适当权限和访问权限的适当用户。(通过 psql 从服务器 glassfish 运行测试)

因此,在进行更改后,我将最新的 postgresql jdbc 4 驱动程序放入应用程序 WEB-INF/lib 目录。制作了一个新的 war 文件并将其部署到我的 glassfish v3.01 服务器上。

我收到以下错误。在我看来,C3P0 找不到 JDBC 驱动程序(位于应用程序 WEB-INF/lib 目录以及 glassfish 域 lib 目录中)

[#|2011-04-28T11:34:58.508-0500|严重|glassfish3.0.1|

javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=11;_ThreadName=FelixStartLevel;|WebModule[/jada]JadaSite: Unable to initialize JPA connection
javax.persistence.PersistenceException: [PersistenceUnit: jadaSite] Unable to build EntityManagerFactory
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:78)
        at com.jada.jpa.connection.JpaConnection.init(JpaConnection.java:79)
        at com.jada.system.Initializer.init(Initializer.java:162)
        at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1428)
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1230)
        at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5007)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:5280)
        at com.sun.enterprise.web.WebModule.start(WebModule.java:499)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:928)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:912)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:694)
        at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1947)
        at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1619)
        at com.sun.enterprise.web.WebApplication.start(WebApplication.java:90)
        at org.glassfish.internal.data.EngineRef.start(EngineRef.java:126)
        at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:241)
        at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:236)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:339)
        at com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication(ApplicationLoaderService.java:362)
        at com.sun.enterprise.v3.server.ApplicationLoaderService.postConstruct(ApplicationLoaderService.java:185)
        at com.sun.hk2.component.AbstractWombImpl.inject(AbstractWombImpl.java:174)
        at com.sun.hk2.component.ConstructorWomb$1.run(ConstructorWomb.java:87)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.hk2.component.ConstructorWomb.initialize(ConstructorWomb.java:84)
        at com.sun.hk2.component.AbstractWombImpl.get(AbstractWombImpl.java:77)
        at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:58)
        at com.sun.hk2.component.LazyInhabitant.get(LazyInhabitant.java:107)
        at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:60)
        at com.sun.enterprise.v3.server.AppServerStartup.run(AppServerStartup.java:236)
        at com.sun.enterprise.v3.server.AppServerStartup.start(AppServerStartup.java:128)
        at com.sun.enterprise.module.bootstrap.Main.launch(Main.java:457)
        at com.sun.enterprise.module.bootstrap.Main.launch(Main.java:401)
        at org.jvnet.hk2.osgiadapter.HK2Main.start(HK2Main.java:125)
        at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:640)
        at org.apache.felix.framework.Felix.activateBundle(Felix.java:1700)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1622)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:915)
        at org.jvnet.hk2.osgimain.Main.start(Main.java:140)
        at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:640)
        at org.apache.felix.framework.Felix.activateBundle(Felix.java:1700)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1622)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1077)
        at org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264)
        at java.lang.Thread.run(Thread.java:619)
Caused by: org.hibernate.HibernateException: JDBC Driver class not found: 
        at org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:123)
        at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
        at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)
        at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89)
        at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2119)
        at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2115)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1339)
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
        ... 45 more
Caused by: java.lang.ClassNotFoundException: 
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:192)
        at org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:118)
        ... 53 more
|#]

是否有人发现我的连接参数有任何问题,或者知道 C3P0 为何缺少这些驱动程序?

编辑

我确实看到了一些看起来像是由 C3P0 未找到驱动程序引起的问题,因此我也尝试将 C3P0 jar 放入 glassfish 库中,但仍然遇到相同的错误。这是下面评论中的错误,以更好的方式和更多信息。

[#|2011-04-28T12:37:49.964-0500|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=11;_ThreadName=Thread-1;|2011-04-28 12:37:49,964  INFO [FelixStartLevel] (JCLLoggerAdapter.java:265) - Mapping collection: com.jada.jpa.entity.ShippingType.shippingMethodRegionTypes -> shipping_method_region_type
|#]

[#|2011-04-28T12:37:50.009-0500|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=11;_ThreadName=Thread-1;|2011-04-28 12:37:50,008  INFO [FelixStartLevel] (JCLLoggerAdapter.java:265) - Hibernate Validator not found: ignoring
|#]

[#|2011-04-28T12:37:50.405-0500|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=11;_ThreadName=Thread-1;|2011-04-28 12:37:50,404  INFO [FelixStartLevel] (JCLLoggerAdapter.java:286) - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
|#]

[#|2011-04-28T12:37:50.491-0500|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=11;_ThreadName=Thread-1;|2011-04-28 12:37:50,490  INFO [FelixStartLevel] (JCLLoggerAdapter.java:265) - Initializing connection provider: org.hibernate.connection.C3P0ConnectionProvider
|#]

[#|2011-04-28T12:37:50.504-0500|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=11;_ThreadName=Thread-1;|2011-04-28 12:37:50,504  INFO [FelixStartLevel] (JCLLoggerAdapter.java:265) - C3P0 using driver:  at URL: 
|#]

[#|2011-04-28T12:37:50.506-0500|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=11;_ThreadName=Thread-1;|2011-04-28 12:37:50,505  INFO [FelixStartLevel] (JCLLoggerAdapter.java:265) - Connection properties: {user=, password=****, autocommit=true, release_mode=auto}
|#]

[#|2011-04-28T12:37:50.507-0500|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=11;_ThreadName=Thread-1;|2011-04-28 12:37:50,506  INFO [FelixStartLevel] (JCLLoggerAdapter.java:265) - autocommit mode: true
|#]

[#|2011-04-28T12:37:50.543-0500|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=11;_ThreadName=Thread-1;|2011-04-28 12:37:50,531 ERROR [FelixStartLevel] (JCLLoggerAdapter.java:535) - JDBC Driver class not found: 
java.lang.ClassNotFoundException: 
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:192)
        at org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:118)
        at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
        at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)
        at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89)
        at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2119)
        at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2115)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1339)
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:78)
        at com.jada.jpa.connection.JpaConnection.init(JpaConnection.java:79)
        at com.jada.system.Initializer.init(Initializer.java:162)
        at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1428)
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1230)
        at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5007)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:5280)
        at com.sun.enterprise.web.WebModule.start(WebModule.java:499)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:928)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:912)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:694)
        at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1947)
        at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1619)
        at com.sun.enterprise.web.WebApplication.start(WebApplication.java:90)
        at org.glassfish.internal.data.EngineRef.start(EngineRef.java:126)
        at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:241)
        at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:236)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:339)
        at com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication(ApplicationLoaderService.java:362)
        at com.sun.enterprise.v3.server.ApplicationLoaderService.postConstruct(ApplicationLoaderService.java:185)
        at com.sun.hk2.component.AbstractWombImpl.inject(AbstractWombImpl.java:174)
        at com.sun.hk2.component.ConstructorWomb$1.run(ConstructorWomb.java:87)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.hk2.component.ConstructorWomb.initialize(ConstructorWomb.java:84)
        at com.sun.hk2.component.AbstractWombImpl.get(AbstractWombImpl.java:77)
        at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:58)
        at com.sun.hk2.component.LazyInhabitant.get(LazyInhabitant.java:107)
        at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:60)
        at com.sun.enterprise.v3.server.AppServerStartup.run(AppServerStartup.java:236)
        at com.sun.enterprise.v3.server.AppServerStartup.start(AppServerStartup.java:128)
        at com.sun.enterprise.module.bootstrap.Main.launch(Main.java:457)
        at com.sun.enterprise.module.bootstrap.Main.launch(Main.java:401)
        at org.jvnet.hk2.osgiadapter.HK2Main.start(HK2Main.java:125)
        at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:640)
        at org.apache.felix.framework.Felix.activateBundle(Felix.java:1700)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1622)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:915)
        at org.jvnet.hk2.osgimain.Main.start(Main.java:140)
        at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:640)
        at org.apache.felix.framework.Felix.activateBundle(Felix.java:1700)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1622)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1077)
        at org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264)
        at java.lang.Thread.run(Thread.java:619)
|#]

【问题讨论】:

  • 在我看来,C3P0 没有使用我的连接属性。 docjar.com/html/api/org/hibernate/connection/… - 第 103 + 104 行打印在我的堆栈跟踪中,显示我缺少连接参数。除了persistence.xml之外,我不知道在哪里设置了这些
  • 对于赏金,这是使用 postgresql 作为数据库在 glassfish 3.01 上运行的 Jadasite 2.04.02。我可以使用 glassfish 3.01 和 mysql(开发人员使用 tomcat 和 mysql)让它运行没有问题。我也尝试过同样错误的tomcat和postgresql。

标签: java hibernate glassfish c3p0


【解决方案1】:

这里有两件事看起来很奇怪:

1) ClassNotFoundException 的堆栈跟踪未提及未找到的类的名称:

引起:java.lang.ClassNotFoundException:

这似乎暗示它正在尝试加载一个没有名称的类,否则您会看到找不到的类的名称。

2) 不确定这是否只是复制和粘贴错误,但在上面配置的 sn-p 中,您缺少此行的结尾引号:

<property name="hibernate.connection.url" 
     value="jdbc:postgresql://dev-rdbms.example.com:5432/jada>

这会导致 XML 格式错误。

3) 当你说时

创建一个新的 jar 文件并将其部署到我的 glassfish v3.01 服务器。

你的意思是说你制作了一个新的“war”文件,而不是“jar”?您需要确保 postgres jdbc jar 最终位于 glassfish 的类路径中。

【讨论】:

  • 这是三件奇怪的事情,而不是两件 :)
  • 好的,感谢您发现马特,修复了复制粘贴错误,我的意思是要打一场新的战争。我又查看了一些日志,并在 java.lang.ClassNotFoundException 上方发现了这一点:---- _ThreadID=11;_ThreadName=Thread-1;|2011-04-28 11:34:58,493 ERROR [FelixStartLevel] (JCLLoggerAdapter .java:535) - 未找到 JDBC 驱动程序类:所以我相信 JDBC 驱动程序位于类路径中,因为它位于 Glassfish lib 目录中(过去已被该特定 glassfish 安装使用)和 WEB-应用程序的 INF/lib 目录。
【解决方案2】:

让我们试试这个:

你使用 EJB 对吗(JPA 表示 EJB)?所以,你至少有一个 EAR、一个 JAR 和一个可能的 WAR,对吗?您知道,JAR 无法访问 WAR 文件。如果您的 postgresql jdbc 4 驱动程序在 WAR/WEB-INF/lib 上,则您的 JAR(需要它)无法访问。

尝试将您的库放在 EAR 库中(查找 glassfish 文档,但也类似于 EAR/WEB-INF/lib)或将其放在服务器库中(例如 GLASSFISH_DIR/lib/classes)

【讨论】:

  • “JPA 意味着 EJB”不是真的,不。
  • 嗯.. 请解释一下。 JPA 实体如何不是 EJB?
  • 您没有指定 JPA 实体,JPA 本身将引用 Java Persistence API。我不确定自己是否所有 JPA 实体也符合 EJB 100% 的规范。
  • 就应用而言,它被打包为一个单一的war文件。我浏览了一下,没有找到任何 EAR 或 JAR 实体。但我并没有完全通过它。我会再看看,看看我发现了什么。
  • WAR 中没有其他 Jada JAR 或 EAR 文件。
【解决方案3】:

为什么属性文件中有hibernate.connection.driver_class=org.postgresql.drivers?不应该是org.postgresql.Driver吗?

编辑:

啊!看起来 Jadasite 使用属性文件来加载驱动程序类。

来自com/jada/jpa/connection/JpaConnection.java类:

67      
68      public void init(String driver, String url, String user, String password) throws Exception {
69          this.driver = driver;
70          this.url = url;
71          this.user = user;
72          this.password = password;
73          
74          HashMap<String, String> map = new HashMap<String, String>();
75          map.put(Environment.DRIVER, driver);
76          map.put(Environment.URL, url);
77          map.put(Environment.USER, user);
78          map.put(Environment.PASS, password);
79          factory = Persistence.createEntityManagerFactory("jadaSite", map);
80      }

读作(com/jada/system/Initializer.java):

 111            if (requireInstall) {
 112                if (!installCompleted) {
 113                    log("Installation has not been done.  Skipping custom initialization.");
 114                    log("Please proceed to installation and remmember to restart before continue.");
 115                    log("Awaiting installation....");
 116                    return;
 117                }
 118                try {
 119                    Properties installProperties = installer.getConfigProperties();

来自(com/jada/install/process/Installer.java):

 345        public Properties getConfigProperties() throws IOException {
 346            String filename = servletLocation + Constants.CONFIG_PROPERTIES_FILENAME;
 347            File file = new File(filename);
 348            FileInputStream input = new FileInputStream(file);
 349            Properties properties = new Properties();
 350            properties.load(input);
 351            return properties;
 352        }

从文件中读取的内容(com/jada/util/Constants.java):

 275        public static final String CONFIG_PROPERTIES_FILENAME = "WEB-INF/jada.properties";

【讨论】:

  • 我想我可能是一个可怕的堆栈溢出者。我忘记了我原来的帖子已经过时了!我确实改变了最初的 hibernate.connection.driver_class 。我还更新了 jada 使用的属性文件以及 web.xml。我仍然遇到同样的问题,而且休眠从未将正确的配置信息从任何位置传递到 C3P0。看到你在那里做了所有的工作,我本可以回去更新所有我要给你的赏金
猜你喜欢
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 2013-12-29
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多