Hibernate Connection с использованием C3P0 и Postgresql

Я пытаюсь запустить приложение (jadasite), используя postgresql и Glassfish. Разработчики приложений рекомендуют tomcat и mysql. Я не могу использовать tomcat и mysql для этого приложения atm. Приложение использует JPA, поэтому с postgresql проблем быть не должно. Разработчики упоминают, что postgresql/многие другие базы данных должны работать.

Итак, вот что я сделал, используя следующие две страницы в качестве ссылки:

Документация по Hibernate

форумы Jadasite

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 с серверной стеклянной рыбы).

Поэтому после внесения изменений я поместил последний драйвер postgresql jdbc 4 в каталог приложений WEB-INF/lib. Создал новый военный файл и развернул его на своем сервере Glassfish v3.01.

Я получаю следующие ошибки. Мне кажется, что C3P0 не может найти драйверы JDBC (расположенные в каталоге приложений WEB-INF/lib, а также в каталоге lib доменов Glassfish)

[#|2011-04-28T11:34:58.508-0500|СЕРЬЕЗНЫЙ|стеклянная рыба3.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 в библиотеку 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)
|#]

person grantk    schedule 28.04.2011    source источник
comment
Мне кажется, что C3P0 не улавливает свойства моего подключения. docjar.com/html/api/org/hibernate/ connection/ - Строки 103 + 104 a напечатаны в моих трассировках стека и показывают, что мне не хватает параметров соединения. Я понятия не имею, где еще они установлены, кроме persistence.xml.   -  person grantk    schedule 29.04.2011
comment
В качестве вознаграждения это Jadasite 2.04.02, работающий на Glassfish 3.01, использующий postgresql в качестве базы данных. Я могу заставить его работать без проблем, используя Glassfish 3.01 и mysql (разработчики используют tomcat и mysql). Я также пробовал tomcat и postgresql с той же ошибкой.   -  person grantk    schedule 02.05.2011


Ответы (3)


Странными здесь кажутся две вещи:

1) трассировка стека для ClassNotFoundException не упоминает имя класса, который не был найден:

Вызвано: java.lang.ClassNotFoundException:

Казалось бы, это означает, что он пытается загрузить класс без имени, иначе вы ожидаете увидеть имя класса, который не может быть найден.

2) Не уверен, что это просто ошибка копирования и вставки, но во фрагменте вашей конфигурации выше в этой строке отсутствует конечная кавычка:

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

что приведет к искажению XML.

3) Когда вы говорите

Создал новый файл jar и развернул его на своем сервере Glassfish v3.01.

Вы хотите сказать, что создали новый «военный» файл, а не «банку»? Вы должны убедиться, что jar jdbc postgres в конечном итоге находится на пути к классам Glassfish.

person matt b    schedule 28.04.2011
comment
Это три странные вещи, а не две :) - person BalusC; 28.04.2011
comment
Хорошо, спасибо, что поймали этого Мэтта, исправил ошибку копирования и вставки, и я действительно хотел сказать, что начинается новая война. Я просмотрел еще несколько журналов и нашел это прямо над java.lang.ClassNotFoundException: ---- _ThreadID=11;_ThreadName=Thread-1;|2011-04-28 11:34:58,493 ОШИБКА [FelixStartLevel] (JCLLoggerAdapter .java: 535) - Класс драйвера JDBC не найден: поэтому я считаю, что драйвер JDBC находится в пути к классам, который я вижу, поскольку он находится в каталоге lib Glassfish (использовался этой конкретной установкой Glassfish в прошлом) и в WEB- Каталог INF/lib приложения. - person grantk; 28.04.2011

Давайте попробуем это:

Вы правильно используете 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)

person Plínio Pantaleão    schedule 28.04.2011
comment
JPA означает не совсем EJB, нет. - person matt b; 28.04.2011
comment
хм.. Объясните пожалуйста. Как объект JPA не является EJB? - person Plínio Pantaleão; 28.04.2011
comment
Вы не указали объект JPA, JPA сам по себе будет ссылаться на Java Persistence API. Однако я сам не уверен, что все объекты JPA также соответствуют спецификациям EJB на 100%. - person grantk; 28.04.2011
comment
И что касается приложения, оно упаковано в виде одного файла войны. Я немного просмотрел его и не нашел никаких сущностей EAR или JAR. Но я не прошел его полностью. Я посмотрю еще раз и посмотрю, что я нахожу. - person grantk; 28.04.2011
comment
В WAR нет других файлов Jada JAR или EAR. - person grantk; 29.04.2011
comment
Поскольку вы используете C3PO, попробуйте настроить его. Поместите это в hibernate.cfg просто для теста: - person Plínio Pantaleão; 29.04.2011

Почему у вас 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";
person Binil Thomas    schedule 03.05.2011
comment
Я думаю, что я, возможно, ужасный переполненный стек на этом. Я забыл, что мой оригинальный пост настолько устарел! Я действительно изменил исходный класс hibernate.connection.driver_class. Я также обновил файл свойств, используемый jada, а также файл web.xml. Я все еще сталкиваюсь с той же проблемой, и она заключается в том, что спящий режим никогда не передает правильную информацию о конфигурации из любого места в C3P0. Увидев, что вы сделали всю работу там, и я мог бы вернуться и обновить все, что я собираюсь дать вам награду - person grantk; 04.05.2011