2012-11-20 38 views
0

我試圖在Heroku上部署一個簡單的CRUD應用程序。但是我不想使用Spring。我使用的是JSF(Primefaces)和JPA(Hibernate)來實現持久性。當我米試圖連接到DB I m到處以下異常:如何在不使用Spring的情況下連接到Heroku的PostgreSQL?

java.lang.UnsupportedOperationException: The user must supply a JDBC connection 
org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:54) 
org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160) 
org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81) 
org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473) 
org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:60) 
org.Handlers.UserHandler.getAllUsers(UserHandler.java:31) 
org.tutorial.LoginBean.authenticate(LoginBean.java:52) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:616) 
org.apache.el.parser.AstValue.invoke(AstValue.java:264) 
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) 
com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
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:794) 
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
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:593) 

我的persistence.xml看起來是這樣的:

<persistence-unit name="test"> 
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
<properties> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> 
    <property name="driverClassName" value="${database.driverClassName}"/> 
    <property name="hibernate.show_sql" value="true"/> 
    <property name="url" value="#{ 'jdbc:postgresql://' + @dbUrl.getHost() + @dbUrl.getPath() }"/> 
    <property name="username" value="#{ @dbUrl.getUserInfo().split(':')[0] }"/> 
    <property name="password" value="#{ @dbUrl.getUserInfo().split(':')[1] }"/> 
    <property name="hibernate.max_fetch_depth" value="3"/> 
    <property name="hibernate.hbm2ddl.auto" value="update"/> 
</properties> 

我抄在applicationContext.xml文件的屬性。

有人有一個想法可能是什麼問題?我已經看過類似的帖子,但無法找到解決方案。

我的pom.xml如下:

<dependencies> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>taglibs</groupId> 
     <artifactId>standard</artifactId> 
     <version>1.1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hsqldb</groupId> 
     <artifactId>hsqldb</artifactId> 
     <version>2.2.8</version> 
    </dependency> 
    <dependency> 
     <groupId>postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.1-901.jdbc4</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>commons-dbcp</groupId> 
     <artifactId>commons-dbcp</artifactId> 
     <version>1.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>3.6.10.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.0-api</artifactId> 
     <version>1.0.0.Final</version> 
     <classifier/> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>3.6.4.Final</version> 
     <classifier/> 
    </dependency> 
    <dependency> 
     <groupId>com.github.jsimone</groupId> 
     <artifactId>webapp-runner</artifactId> 
     <version>7.0.27.1</version> 
     <scope>provided</scope> 
    </dependency>      
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>6.0</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

回答

1

我也通過了同樣的問題去和你的持久化單元。以上配置和pom.xml的是正確的,但有可能在ApplicationContext中是錯誤的。 xml你沒有包括在這裏。

以下是applictioncontext.xml中可能存在缺陷的部分。

<bean class="java.net.URI" id="dbUrl"> 
     <constructor-arg value="#{systemEnvironment['DATABASE_URL']}" /> 
    </bean> 

    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="org.postgresql.Driver" />  
     <property name="url" value="#{ 'jdbc:postgresql://' + @dbUrl.getHost() + @dbUrl.getPath() }" /> 
     <property name="username" value="#{ @dbUrl.getUserInfo().split(':')[0] }" /> 
     <property name="password" value="#{ @dbUrl.getUserInfo().split(':')[1] }" /> 
    </bean> 

    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="test"/> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="showSql" value="true" /> 
       <property name="generateDdl" value="true" /> 

       <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" /> 
      </bean> 
     </property> 
    </bean> 

如果您需要任何幫助,請告訴我。

相關問題