Setup of simple Spring MVC, EclipseLink, Wildfly, Maven project -
i build spring mvc webapp maven, uses eclipselink jpa provider , runs on wildfly application server. unfortunately cannot make run. want use newest version of everything.
i'm getting following error when try run webapp on wildfly 8.2 or tomcat 8:
01:25:11,648 warn [org.springframework.web.context.support.xmlwebapplicationcontext] (msc service thread 1-1) exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.beancreationexception:
error creating bean name 'emf' defined in servletcontext resource [/web-inf/spring-servlet.xml]: invocation of init method failed; nested exception javax.persistence.persistenceexception:
exception [eclipselink-28018] (eclipse persistence services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.entitymanagersetupexception exception description: predeployment of persistenceunit [movietime] failed.
internal exception: exception [eclipselink-28010] (eclipse persistence services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.entitymanagersetupexception exception description: persistenceunitinfo movietime has transactiontype jta, not have jtadatasource defined.
a googled lot, didn't find helpful. think missing persistence.xml, or pom.xml, can't figure out what. the whole exception here.
here file hierarchy of project. (i cannot share image on yet)
i didn't open entities package because have ~30 entities generated database tables.
here pom.xml:
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelversion>4.0.0</modelversion> <groupid>movietimeproject</groupid> <artifactid>movietimeproject</artifactid> <packaging>war</packaging> <version>0.0.1-snapshot</version> <name>movietimeproject maven webapp</name> <url>http://maven.apache.org</url> <repositories> <repository> <id>oss.sonatype.org</id> <name>oss sonatype staging</name> <url>https://oss.sonatype.org/content/groups/staging</url> </repository> <repository> <id>jboss repository</id> <url>https://repository.jboss.org/nexus/content/groups/public/</url> </repository> </repositories> <properties> <spring.version>4.1.6.release</spring.version> </properties> <dependencymanagement> <dependencies> <dependency> <groupid>org.jboss.spec</groupid> <artifactid>jboss-javaee-7.0</artifactid> <version>1.0.2.final</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencymanagement> <dependencies> <!-- junit --> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>3.8.2</version> <scope>test</scope> </dependency> <!-- jboss sever --> <!-- mysql & jpa & eclipselink --> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>5.1.35</version> </dependency> <dependency> <groupid>org.eclipse.persistence</groupid> <artifactid>javax.persistence</artifactid> <version>2.1.0</version> <!-- <scope>provided</scope> --> <!-- since running inside java ee container --> </dependency> <dependency> <groupid>org.eclipse.persistence</groupid> <artifactid>eclipselink</artifactid> <version>2.6.0</version> <!-- <scope>provided</scope> --> <!-- running inside java ee container --> <!-- <scope>compile</scope> --> </dependency> <!-- spring dependencies --> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-core</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-webmvc</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-tx</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-orm</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-web</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-instrument</artifactid> <version>${spring.version}</version> </dependency> <!-- servlet & jstl --> <dependency> <groupid>jstl</groupid> <artifactid>jstl</artifactid> <version>1.2</version> </dependency> <dependency> <groupid>javax.servlet</groupid> <artifactid>javax.servlet-api</artifactid> <version>3.1.0</version> </dependency> <dependency> <groupid>javax.servlet.jsp</groupid> <artifactid>javax.servlet.jsp-api</artifactid> <version>2.3.2-b01</version> </dependency> <dependency> <groupid>aopalliance</groupid> <artifactid>aopalliance</artifactid> <version>1.0</version> </dependency> <dependency> <groupid>cglib</groupid> <artifactid>cglib</artifactid> <version>3.1</version> </dependency> <dependency> <groupid>aspectj</groupid> <artifactid>aspectjrt</artifactid> <version>1.5.4</version> </dependency> <dependency> <groupid>org.aspectj</groupid> <artifactid>aspectjweaver</artifactid> <version>1.8.5</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> <finalname>movietimeproject</finalname> </build> </project> here persistence.xml:
<?xml version="1.0" encoding="utf-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="movietime" transaction-type="jta"> <provider>org.eclipse.persistence.jpa.persistenceprovider</provider> <properties> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.driver"/> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/movietime2"/> <property name="javax.persistence.jdbc.user" value="root"/> <property name="javax.persistence.jdbc.password" value="root"/> </properties> </persistence-unit> </persistence> web.xml:
<web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemalocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="webapp_id" version="3.1"> <display-name>movietime!</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>spring</servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <load-on-startup>1</load-on-startup> <!-- <init-param> <param-name>contextconfiglocation</param-name> <param-value>src/main/webapp/web-inf/dispatcher-servlet.xml</param-value> </init-param> --> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <!-- <url-pattern>/</url-pattern> --> <url-pattern>/</url-pattern> </servlet-mapping> <!-- <context-param> <param-name>contextconfiglocation</param-name> <param-value>src/main/webapp/web-inf/applicationcontext.xml</param-value> </context-param> --> <!-- creates spring container shared servlets , filters --> <!-- <listener> <listener-class>org.springframework.web.context.contextloaderlistener</listener-class> </listener> --> </web-app> spring-servlet.xml:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemalocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <!-- use @component annotations bean definitions --> <context:component-scan base-package="com.movietime.controller" /> <!-- use @controller annotations mvc controller definitions --> <mvc:annotation-driven enable-matrix-variables="true"/> <!-- add jpa support --> <bean id="emf" class="org.springframework.orm.jpa.localcontainerentitymanagerfactorybean"> <property name="loadtimeweaver"> <bean class="org.springframework.instrument.classloading.instrumentationloadtimeweaver"/> </property> </bean> <!-- add transaction support --> <bean id="mytxmanager" class="org.springframework.orm.jpa.jpatransactionmanager"> <property name="entitymanagerfactory" ref="emf"/> </bean> <!-- use @transaction annotations managing transactions --> <tx:annotation-driven transaction-manager="mytxmanager" /> <!-- view resolver --> <bean class= "org.springframework.web.servlet.view.internalresourceviewresolver"> <property name="prefix" value="/web-inf/"/> </bean> <!-- resolves views selected rendering @controllers .jsp resources in /web-inf/pages directory --> <!-- <bean id="viewresolver" class="org.springframework.web.servlet.view.internalresourceviewresolver"> <property name="prefix"> <value>/web-inf/pages/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> --> <!-- configure plugin json request , response in method handler --> <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter"> <property name="messageconverters"> <list> <ref bean="jsonmessageconverter"/> </list> </property> </bean> --> <!-- configure bean convert json pojo , vice versa --> <!-- <bean id="jsonmessageconverter" class="org.springframework.http.converter.json.mappingjackson2httpmessageconverter"/> --> </beans> hellocontroller.java:
package com.movietime.controller; import java.util.list; import javax.annotation.resource; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.servlet.modelandview; import com.movietime.entities.movie; import com.movietime.dataaccesslayer.movieservice;; /** * @author attila * * presentation layer (mvc) / controller */ @controller public class hellocontroller { @resource movieservice service; @requestmapping("/index") public modelandview welcomepage() { list<movie> result = service.findbytitle("the eternal sunshine of"); system.out.println(result.get(0)); return new modelandview("index.jsp"); } } movieservice.java:
package com.movietime.dataaccesslayer; import java.util.list; import javax.annotation.resource; import org.springframework.stereotype.service; import org.springframework.transaction.annotation.transactional; import com.movietime.dao.movierepository; import com.movietime.entities.movie; @service public class movieservice { @resource private movierepository movierepository; @transactional(readonly = true) public list<movie> findbytitle(string title) { list<movie> result = movierepository.findmoviesbytitle(title); return result; } } movierepository.java:
package com.movietime.dao; import java.util.list; import javax.persistence.entitymanager; import javax.persistence.persistencecontext; import javax.persistence.query; import org.springframework.context.annotation.scope; import org.springframework.stereotype.repository; import org.springframework.transaction.annotation.transactional; import com.movietime.entities.movie; @repository @scope(value="singleton") public class movierepository { @persistencecontext private entitymanager em; @transactional public void register(movie mov) { // save employee this.em.persist(mov); } @suppresswarnings("unchecked") public list<movie> findmoviesbytitle(string title) { string querystring = "select m movie m m.title '" + title + "%'"; query query = em.createquery(querystring, movie.class); return query.getresultlist(); } }
okey, solved error changing transaction type resource_local.
Comments
Post a Comment