Hibernate Соединение с использованием C3P0 и Postgresql - PullRequest
1 голос
/ 28 апреля 2011

Я пытаюсь запустить приложение (jadasite), используя postgresql и glassfish.Разработчики приложения рекомендуют Tomcat и MySQL.Я не могу действительно использовать Tomcat и MySQL для этого приложения АТМ.Приложение использует JPA, поэтому postgresql не должен быть проблемой.Дизайнеры упоминают, что postgresql / многие другие базы данных должны работать.

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

Hibernate Docs

Форумы 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 для создания db-совместимого db-дампа, совместимого с postgresql, загрузил все данные и создал соответствующих пользователей с соответствующими разрешениями и доступом (протестировано черезтакже запускается psql с сервера glassfish)

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

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

[# | 2011-04-28T11: 34: 58.508-0500 | SEVERE | 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 в библиотеку 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)
|#]

Ответы [ 3 ]

2 голосов
/ 28 апреля 2011

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

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-файл postgres jdbc в конечном итоге находится на пути к классу Glassfish.

1 голос
/ 28 апреля 2011

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

Вы правильно используете EJB (JPA означает EJB)?Итак, у вас есть хотя бы один EAR, один JAR и, возможно, одна WAR, верно?Вы знаете, JAR не могут получить доступ к файлам WAR.Если ваш драйвер postgresql jdbc 4 находится в WAR / WEB-INF / lib, ваши JAR-файлы (которые в нем нуждаются) не могут получить доступ.

Попробуйте поместить вашу lib в EAR-библиотеку (ищите для этого документацию по Glassfish, но это что-тонапример, EAR / WEB-INF / lib) или поместить его в серверные библиотеки (что-то вроде GLASSFISH_DIR / lib / classes)

0 голосов
/ 04 мая 2011

Почему у вас есть hibernate.connection.driver_class=org.postgresql.drivers в файле свойств? Разве это не должно быть org.postgresql.Driver вместо этого?

Edit:

Ах! Похоже, 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";
...