2015-12-28 5 views
0

Я создаю портлет для загрузки в liferay 6.2. Портлет - весенний портлет с собственным дБ и использует jpa.entityManagerFactory не инициализирован

Мой П:

<?xml version="1.0"?> 

<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>it.realt</groupId> 
    <artifactId>MyPos</artifactId> 
    <packaging>war</packaging> 
    <name>MyPos Portlet</name> 
    <version>1.0-SNAPSHOT</version> 

    <properties> 
     <!-- original spring version 3.0.7.RELEASE --> 
     <spring.version>4.2.4.RELEASE</spring.version> 
     <liferay.maven.plugin.version>6.2.10.15</liferay.maven.plugin.version> 
     <liferay.version>6.2.4</liferay.version> 
     <liferay.auto.deploy.dir>C:\liferay-portal-6.2-ce-ga5\deploy</liferay.auto.deploy.dir> 
     <liferay.app.server.deploy.dir>C:\liferay-portal-6.2-ce-ga5\tomcat-7.0.62\webapps</liferay.app.server.deploy.dir> 
     <liferay.app.server.lib.global.dir>C:\liferay-portal-6.2-ce-ga5\tomcat-7.0.62\lib\ext</liferay.app.server.lib.global.dir> 
     <liferay.app.server.portal.dir>C:\liferay-portal-6.2-ce-ga5\tomcat-7.0.62\webapps\ROOT</liferay.app.server.portal.dir> 
    </properties>   
    <build> 
     <plugins> 
      <plugin> 
       <groupId>com.liferay.maven.plugins</groupId> 
       <artifactId>liferay-maven-plugin</artifactId> 
       <version>${liferay.maven.plugin.version}</version> 
       <executions> 
        <execution> 
         <phase>generate-sources</phase> 
         <goals> 
          <goal>build-css</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <autoDeployDir>${liferay.auto.deploy.dir}</autoDeployDir> 
        <appServerDeployDir>${liferay.app.server.deploy.dir}</appServerDeployDir> 
        <appServerLibGlobalDir>${liferay.app.server.lib.global.dir}</appServerLibGlobalDir> 
        <appServerPortalDir>${liferay.app.server.portal.dir}</appServerPortalDir> 
        <liferayVersion>${liferay.version}</liferayVersion> 
        <pluginType>portlet</pluginType> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.3</version> 
       <configuration> 
        <encoding>UTF-8</encoding> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>2.7</version> 
       <configuration> 
        <encoding>UTF-8</encoding> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>com.liferay.portal</groupId> 
      <artifactId>portal-service</artifactId> 
      <version>${liferay.version}</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.liferay.portal</groupId> 
      <artifactId>util-bridges</artifactId> 
      <version>${liferay.version}</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.liferay.portal</groupId> 
      <artifactId>util-taglib</artifactId> 
      <version>${liferay.version}</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.liferay.portal</groupId> 
      <artifactId>util-java</artifactId> 
      <version>${liferay.version}</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.portlet</groupId> 
      <artifactId>portlet-api</artifactId> 
      <version>2.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.4</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>2.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-expression</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-webmvc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc-portlet</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context-support</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.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>5.0.6.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.transaction</groupId> 
      <artifactId>jta</artifactId> 
      <version>1.1</version> 
     </dependency>   

     <dependency> 
      <groupId>org.hibernate.java-persistence</groupId> 
      <artifactId>jpa-api</artifactId> 
      <version>2.0.Beta-20090815</version> 
      <type>jar</type> 
     </dependency>   
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-c3p0</artifactId> 
      <version>5.0.6.Final</version> 
     </dependency>     
     <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.0-api</artifactId> 
      <version>1.0.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator-annotation-processor</artifactId> 
      <version>5.2.2.Final</version> 
      <exclusions> 
       <exclusion> 
        <artifactId>slf4j-log4j12</artifactId> 
        <groupId>org.slf4j</groupId> 
       </exclusion> 
      </exclusions> 
     </dependency>   
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.13</version> 
      <type>jar</type> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.7.13</version> 
     </dependency>  


     <dependency> 
      <groupId>org.jsoup</groupId> 
      <artifactId>jsoup</artifactId> 
      <version>1.8.3</version> 
     </dependency>  
     <!-- <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-email</artifactId> 
      <version>1.4</version> 
     </dependency>--> 
     <dependency> 
      <groupId>com.itextpdf</groupId> 
      <artifactId>itextpdf</artifactId> 
      <version>5.5.8</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.mail</groupId> 
      <artifactId>mail</artifactId> 
      <version>1.5.0-b01</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.guava</groupId> 
      <artifactId>guava-collections</artifactId> 
      <version>r03</version> 
     </dependency>   

    </dependencies> 
</project> 

моя конфигурация пружины для портлета:

<?xml version="1.0"?> 

<beans 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd" 
> 
    <context:annotation-config /> 
    <context:component-scan base-package="it.realt.*" /> 
    <tx:annotation-driven transaction-manager="transactionManager" /> 


    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" 
      p:entityManagerFactory-ref="entityManagerFactory" /> 

    <bean id="entityManagerFactory" 
       class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
       p:dataSource-ref="businessDataSource" p:jpaVendorAdapter-ref="jpaAdapter" 
       p:packagesToScan="it.realt.mypos.domain" > 
     <property name="loadTimeWeaver"> 
      <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> 
     </property> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="connection.autoReconnect">true</prop> 
       <prop key="connection.autoReconnectForPools">true</prop> 
       <prop key="connection.is-connection-validation-required">true</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="jpaAdapter" 
      class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
      p:database="POSTGRESQL" p:showSql="true" /> 

    <bean id="bgdApplicationContextProvider" 
      class="it.realt.mypos.util.ApplicationContextProvider" />  

    <bean name="businessDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > 
     <property name="driverClassName" value="org.postgresql.Driver" /> 
     <property name="url" value="jdbc:postgresql://127.0.0.1:5432/myPos" /> 
     <property name="username" value="xxxx" /> 
     <property name="password" value="xxx" /> 
    </bean> 

</beans> 

У меня есть абстрактный класс с использованием дженерик в качестве базы для классов DAO, и я инъекционный EntityManager, используя @PersistenceContext

public abstract class DaoImpl<T extends Serializable, K> implements Dao<T, K> { 

    @PersistenceContext 
    protected EntityManager em; 

    private Class<T> type; 
....... 

Когда запускается сервер liferay и пытается загрузить портлет, я получаю ошибку при инициализации EntityManagerFactory

13:49:22,583 WARN [XmlPortletApplicationContext:546] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in PortletContext resource [/WEB-INF/spring-context/portlet/MyPos-portlet.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index; 
    13:49:22,583 ERROR [DispatcherPortlet:279] Context initialization failed 
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in PortletContext resource [/WEB-INF/spring-context/portlet/MyPos-portlet.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index; 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
     at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1054) 
     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:829) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
     at org.springframework.web.portlet.FrameworkPortlet.createPortletApplicationContext(FrameworkPortlet.java:368) 
     at org.springframework.web.portlet.FrameworkPortlet.initPortletApplicationContext(FrameworkPortlet.java:297) 
     at org.springframework.web.portlet.FrameworkPortlet.initPortletBean(FrameworkPortlet.java:271) 
     at org.springframework.web.portlet.GenericPortletBean.init(GenericPortletBean.java:124) 
     at javax.portlet.GenericPortlet.init(GenericPortlet.java:136) 
....... 

что не так? Может, я что-то забыл в своей конфигурации?

заранее спасибо

ответ

2

Вы используете поставщик JPA2.1 (Hibernate 5.0.6) с бета-версией библиотеки JPA 2.0 в вашем пути к классам (2.0.Beta-20090815). Поэтому провайдер пытается вызвать метод, который еще не существует: Table.indexes().

Используйте библиотеку JPA 2.1.

+0

Я думаю, что также понадобится некоторые из maven исключений – HRgiger

+0

спасибо ... это решило – Andrea

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