2010-06-18 2 views
2

я пишу тест Java APP, и он работает правильно, но это веб-приложение генерирует исключение, подобное с в то же cfg.xml файлHibernate + PostgreSQL бросает JDBCConnectionException: Не удается открыть соединение

<property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
<property name="hibernate.connection.autocommit">true</property> 
<property name="hibernate.connection.release_mode">auto</property> 
<property name="hibernate.current_session_context_class">thread</property> 
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property> 
<property name="hibernate.connection.password">1234</property> 
<property name="hibernate.connection.url">jdbc:postgresql://localhost/postgres</property> 
<property name="hibernate.connection.username">postgres</property> 
<property name="hibernate.default_schema">public</property> 
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> 

<property name="hibernate.ejb.discard_pc_on_close">false</property> 
<property name="hibernate.query.jpaql_strict_compliance">true</property> 
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> 
<property name="hibernate.transaction.flush_before_completion">false</property> 
<property name="hibernate.show_sql">false</property> 
<property name="hibernate.generate_statistics">false</property> 
<property name="hibernate.use_sql_comments">false</property> 
<property name="hibernate.connection.pool_size">100</property> 

Когда я нажимаю «Сохранить кнопка "Я получаю следующее исключение:

javax.servlet.ServletException: org.hibernate.exception.JDBCConnectionException: Cannot open connection 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325) 

root cause 

javax.faces.el.EvaluationException: org.hibernate.exception.JDBCConnectionException: Cannot open connection 
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) 
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
javax.faces.component.UICommand.broadcast(UICommand.java:315) 
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775) 
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267) 
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) 
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:312) 

root cause 

org.hibernate.exception.JDBCConnectionException: Cannot open connection 
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:98) 
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) 
org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) 
org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) 
org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) 
org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1463) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:344) 
$Proxy108.beginTransaction(Unknown Source) 
com.yemex.beans.CompanyBean.saveOrUpdate(CompanyBean.java:52) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
org.apache.el.parser.AstValue.invoke(AstValue.java:196) 
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98) 
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
javax.faces.component.UICommand.broadcast(UICommand.java:315) 
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775) 
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267) 
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) 
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:312) 

root cause 

java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/postgres 
java.sql.DriverManager.getConnection(Unknown Source) 
java.sql.DriverManager.getConnection(Unknown Source) 
org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133) 
org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) 
org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) 
org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1463) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:344) 
$Proxy108.beginTransaction(Unknown Source) 
com.yemex.beans.CompanyBean.saveOrUpdate(CompanyBean.java:52) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
org.apache.el.parser.AstValue.invoke(AstValue.java:196) 
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98) 
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
javax.faces.component.UICommand.broadcast(UICommand.java:315) 
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775) 
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267) 
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) 
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:312) 

BLOCKQUOTE

ответ

0

Что здесь вопрос?

Исключение довольно четко:

org.hibernate.exception.JDBCConnectionException: Невозможно открыть соединение

Убедитесь, что вы можете подключиться к базе данных вы подключены, что конфигурация что у вас нет проблем с сетью, препятствующих подключению и т. д.

+0

Но я настроить спящий режим cfg.xml llike что; \t <имя свойства = "hibernate.connection.driver_class"> org.postgresql.Driver \t <имя свойства = "hibernate.connection.password"> 1234 \t <Свойство Имя = "hibernate.connection.url" > JDBC: PostgreSQL: // Localhost/Postgres имени \t <Свойства = "hibernate.connection.username"> Postgres имени \t <Свойства = "hibernate.default_schema"> общественного имени <Свойства = "hibernate.dialect "> org.hibernate.dialect.PostgreSQLDialect –

+0

Хорошо, и у вас есть база данных postgres работает на localhost в порту по умолчанию, и имеет ли он базу данных с именем postgres, и имеет ли она пользователя с именем postgres с паролем с именем postgres? –

+0

Да Существует база данных, которая является именем postgres и используется по умолчанию порт У этого db есть пользователь, который является именем postgres и его pass = '1234' –

1

Я не смотрел ваш файл конфигурации, но я предполагаю, что он настроен как минимум достаточно хорошо, так как трассировка стека указывает на на нем пытается подключиться к базе данных postgres на локальном URL-адресе JDBC.

Похоже, что большая проблема в том, что он не может найти драйвер Postgres JDBC:

первопричиной

java.sql.SQLException: Нет подходящий драйвер найден для JDBC: PostgreSQL:// локальный/Postgres java.sql.DriverManager.getConnection (Unknown Source) java.sql.DriverManager.getConnection (Unknown Source) org.hibernate.connection.DriverManagerConnectionProvider.getConnection (DriverManagerConnectionProvider.java:133)

Убедитесь, что файл JAR находится в вашем пути к классам. Вы можете скачать его здесь, если у вас его еще нет: http://jdbc.postgresql.org/

+0

Я пишу тестовое Java-приложение, и оно работает правильно, но я думаю, что это веб-приложение имеет проблему. И я управляю драйвером JDBC, и он прав –

6

При столкновении с исключением стоит проверить самую низкую коренную причину в стеке. В данном случае это следующее:

java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/postgres 

Это просто означает, что либо URL неправильно или что желаемый драйвер не присутствует в текущем время выполнения классов. Поскольку URL-адрес выглядит нормально в соответствии с PostgreSQL JDBC documentation, это будет то, что драйвер отсутствует в текущем пути к среде выполнения.

Итак, чтобы исправить эту проблему, вам нужно поместить JAR-файл JDBC-драйвера в путь класса выполнения webapp. /WEB-INF/lib - одна из папок, на которую распространяется путь к классам времени выполнения по умолчанию webapp. Просто откройте JAR-файл PostgreSQL JDBC и передислоцируйте его.

+0

Путь драйвера уже/WEB-INF/lib, но такая же проблема продолжается –

+1

По-видимому, используется другой загрузчик классов. Попробуйте ввести 'Tomcat/lib' или добавить корневой путь файла JAR к' shared.loader' в 'Tomcat/conf/catalina.properties'. – BalusC

0

Проверьте, что у вас есть банка для вашего драйвера базы данных в пути к классам. Проверьте правильность имени класса драйвера. Проверьте правильность подключения.url. У меня такая же ошибка. Единственное отличие: я использую Oracle 11g. У меня был ojdbc14.jar в classpath, имя класса драйвера было правильным, но свойство connection.url было неправильным. Правильный формат в случае Oracle 11g является

JDBC: оракул: тонкий: @localhost: 1521: global_dsn_name

Смежные вопросы