2013-06-27 1 views
0

В настоящее время я пытаюсь настроить проект Spring MVC 3.1.1 с использованием Maven и развертывания на JBoss 7.1.1. Я пробовал несколько учебных пособий, но я не мог закончить, так как в какой-то момент я застрял бы с чем-то, что предполагалось в уроке и отсутствовало в моей настройке.Spring MVC + Maven + JBoss: невозможно развернуть (приложение должно поставлять соединения JDBC)

Моя вторая попытка состояла в том, чтобы создать «проект Spring MVC» с использованием затмения и скопировать/вставить файлы конфигурации из работающего проекта Spring MVC в мой новый, но пока ничего хорошего.

Я создал весь свой домен с помощью JPA и теперь, когда я пытаюсь развернуть я получаю это исключение: Schema export unsuccessful: java.lang.UnsupportedOperationException: The application must supply JDBC connections.

Я нашел много сообщений на форуме и т.д. с людьми, имеющими один и тот же вопрос, но ни один из предложенных решений не устраивает мою проблему. Драйвер Postgresql хорошо определен в зависимостях maven и находится в пути сборки.

Вот основные/SRC/ресурсы/META-INF/persistence.xml файл:

<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/главная/веб-приложение/WEB-INF/web.xml файл :

<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/главная/ресурсы/WEB-INF/весна/appServlet/сервлет-context.xml файл:

<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/главная/ресурсы/WEB-INF/весна/инфраструктура/infrastructure.xml файл:

<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 msgstr "использовать схему" macoloc ".

Обратите внимание, что проект, который я принимаю во всех этих файлах конфигурации, не был установлен мной (очевидно, поскольку этот работает ...). Возможно, некоторые файлы не используются? Я не знаю. Я действительно новичок в этом.

Любая идея, где это происходит не так? Вам, ребята, нужны больше файлов?

Спасибо!

EDIT: вот StackTrace:

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] 

И: Самое странное, я заметил, что таблицы были созданы в моей БД ... Что?

ответ

5

Вы сконфигурировали JPA для инициализации весной (используя LocalContainerEntityManagerFactoryBean), но JBoss также видит ваш persistence.xml и пытается инициализировать JPA самостоятельно (в соответствии с требованиями спецификации JPA для сред сервера приложений). Очевидно, что это не удается, потому что вы не настроили источник данных в persistence.xml.

Чтобы избежать этой проблемы Spring позволяет использовать другое имя для 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 вы можете настроить JPA без persistence.xml вообще.

Смотрите также:

+0

Это работает нормально, но теперь, когда я 'm развертывание моего приложения Я получаю много это сообщение для каждой таблицы (они c reated tho): 13: 56: 22,290 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (поток обслуживания MSC 1-2) HHH000389: Неудачный: создать таблицу User (id int4 not null, version int4 not null, email varchar (255) не null, firstName varchar (255) не null, lastName varchar (255) не null, пароль varchar (255) не null, colocation_id int4, key_id int4, первичный ключ (id)) 13: 56: 22,290 ОШИБКА [org.hibernate.tool.hbm2ddl.SchemaExport] (поток обслуживания MSC 1-2) ОШИБКА: синтаксическая ошибка рядом с «Пользователь». –

+0

OK nvm Я получаю только для пользователя и всех ассоциаций с пользователем, я думаю, что это защищенное слово в SQL. –

2

Существует второй способ решить это решение. Вы можете сказать JBoss игнорировать persistence.xml.

Добавьте следующее свойство в persistence.xml <properties>

<property name="jboss.as.jpa.managed" value="false"/>

Это объясняется в docs как «jboss.as.jpa.managed - может быть установлен в ложь, чтобы отключить контейнер управляемых JPA доступ к блоку постоянства. Значение по умолчанию - true, что позволяет управляемому JPA доступ к контейнеру к модулю сохранения. Обычно это значение устанавливается для false для приложений Seam 2.x + Spring. «