Spring MVC + Maven + JBoss:无法部署(应用程序必须提供JDBC连接) [英] Spring MVC + Maven + JBoss: can't deploy (The application must supply JDBC connections)

查看:124
本文介绍了Spring MVC + Maven + JBoss:无法部署(应用程序必须提供JDBC连接)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在尝试使用Maven设置Spring MVC 3.1.1项目并在JBoss 7.1.1上进行部署. 我已经尝试了一些教程,但是我什么都做不完,因为有时我会陷入教程中假定的设置中,而在我的设置中不存在的东西.

I'm currently trying to setup a Spring MVC 3.1.1 project using Maven and deploying on JBoss 7.1.1. I have tried a few tutorials but I couldn't finish any as at some point I would get stuck with something that was assumed in the tutorial and nonexistent in my setup.

我的第二个尝试是使用eclipse创建一个"Spring MVC项目",并将配置文件从正在运行的Spring MVC项目复制/粘贴到我的新项目中,但到目前为止效果不佳.

My second try was to create a "Spring MVC Project" using eclipse and copy/paste the configuration files from a working Spring MVC project to my new one but so far no good.

我使用JPA创建了我的整个域,现在尝试部署时遇到了以下异常:Schema export unsuccessful: java.lang.UnsupportedOperationException: The application must supply JDBC connections.

I created my whole domain using JPA and now that I try to deploy I get this exception: Schema export unsuccessful: java.lang.UnsupportedOperationException: The application must supply JDBC connections.

我发现许多论坛帖子等都遇到了同样的问题,但是提出的解决方案都不适合我的问题. Postgresql驱动程序在maven依赖项中定义良好,并且在构建路径中.

I found many forum posts etc with people having the same issue but none of the proposed solutions suits my problem. Postgresql driver is well defined in maven dependencies and is in the build path.

这是main/src/resources/META-INF/ persistence.xml 文件:

Here is the main/src/resources/META-INF/persistence.xml file:

<persistence-unit name="root">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.macoloc.domain.Colocation</class>
    <class>com.macoloc.domain.Invitation</class>
    <class>com.macoloc.domain.Key</class>
    <class>com.macoloc.domain.Message</class>
    <class>com.macoloc.domain.MessageSeenBy</class>
    <class>com.macoloc.domain.Payment</class>
    <class>com.macoloc.domain.PaymentParticipation</class>
    <class>com.macoloc.domain.Ping</class>
    <class>com.macoloc.domain.Subtask</class>
    <class>com.macoloc.domain.Task</class>
    <class>com.macoloc.domain.TaskOrder</class>
    <class>com.macoloc.domain.User</class>
    <class>com.macoloc.domain.Versionable</class>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.hbm2ddl.auto" value="create" />
    </properties>
</persistence-unit>

这是src/main/webapp/WEB-INF/ web.xml 文件:

Here is the src/main/webapp/WEB-INF/web.xml file:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml,/WEB-INF/spring/infrastructure/infrastructure.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

这是src/main/resources/WEB-INF/spring/appServlet/ servlet-context.xml 文件的一部分:

Here is a part of src/main/resources/WEB-INF/spring/appServlet/servlet-context.xml file:

<context:component-scan base-package="com.macoloc" />

<annotation-driven />

<tx:annotation-driven />

<mvc:annotation-driven />

<mvc:resources mapping="/js/**" location="/resources/js/" />
<mvc:resources mapping="/css/**" location="/resources/css/" />

<resources mapping="/resources/**" location="/resources/" />

<beans:bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>

最后是src/main/resources/WEB-INF/spring/infrastructure/ infrastructure.xml 文件:

And finally the src/main/resources/WEB-INF/spring/infrastructure/infrastructure.xml file:

<context:annotation-config />

<tx:annotation-driven />

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSourceDirect" />
</bean>

<bean id="dataSourceDirect" class="org.postgresql.ds.PGSimpleDataSource">
    <property name="user" value="macoloc"></property>
    <property name="password" value="macoloc"></property>
    <property name="portNumber" value="5432"></property>
    <property name="serverName" value="localhost"></property>
    <property name="databaseName" value="MaColoc"></property>
</bean>

<bean class="org.springframework.orm.jpa.JpaTransactionManager"
    id="transactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

在postgres中,我将用户"macoloc"设置为使用数据库"MaColoc"的"macoloc"模式.

In postgres I've set the user "macoloc" to use DB "MaColoc"'s "macoloc" schema.

请注意,我要使用所有这些配置文件的项目不是我设置的(显然,因为该项目正在运行...).可能有一些未使用的文件?我不知道.我真的很陌生.

Note that the project I'm taking all these configuration files wasn't set by me (obviously since this one is working...). There might be some files unused? I don't know. I'm really new to this.

您知道哪里出错了吗?你们需要更多文件吗?

谢谢!

编辑:这是堆栈跟踪:

16:11:21,568 INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-8) JBAS010404: Deploying non-JDBC-compliant driver class org.postgresql.Driver (version 9.0)
16:11:21,585 INFO  [org.jboss.as.jpa] (MSC service thread 1-4) JBAS011402: Starting Persistence Unit Service 'MaColoc.war#root'
16:11:22,205 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-4) HHH000231: Schema export unsuccessful: java.lang.UnsupportedOperationException: The application must supply JDBC connections
    at org.hibernate.service.jdbc.connections.internal.UserSuppliedConnectionProviderImpl.getConnection(UserSuppliedConnectionProviderImpl.java:62) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.tool.hbm2ddl.DatabaseExporter.<init>(DatabaseExporter.java:52) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:368) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:305) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:294) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:452) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.7.0_21]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.7.0_21]
    at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_21]

而且:最奇怪的是,我注意到这些表是在我的数据库中创建的...什么?

And: Most weird, I noticed the tables were created in my DB... What?

推荐答案

您已将JPA配置为由Spring初始化(使用LocalContainerEntityManagerFactoryBean),但JBoss也会看到您的persistence.xml并尝试自行初始化JPA(如对于应用程序服务器环境,是JPA规范所要求的).显然,它失败了,因为您没有在persistence.xml中配置数据源.

You configured JPA to be initialized by Spring (using LocalContainerEntityManagerFactoryBean), but JBoss also sees your persistence.xml and tries to initialize JPA on its own (as required by JPA Specification for application server environments). Obviously, it fails, because you didn't configure a data source in persistence.xml.

为避免此问题,Spring允许您为persistence.xml使用不同的名称:

To avoid this problem Spring allows you to use different name for persistence.xml:

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    ...
    <property name = "persistenceXmlLocation" 
        value = "classpath:/META-INF/spring-persistence.xml" />
</bean>

或者,从Spring 3.1开始,您可以完全不使用persistence.xml来配置JPA.

Alternatively, since Spring 3.1 you can configure JPA without persistence.xml at all.

另请参见:

这篇关于Spring MVC + Maven + JBoss:无法部署(应用程序必须提供JDBC连接)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆