2013-01-28 4 views
2

Я использую Hibernate 4, Spring 3, JSF 2.0 и Weblogic 10.3.6развертывания Weblogic причины - Ошибка создания боб с именем 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor # 0'

Когда я начинаю сервера WebLogic и сервер запускается успешно, однако всякий раз, когда он начинает публикацию приложения, я получаю следующее исключение.

Error creating bean with name 
'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' 
    defined in ServletContext resource [/WEB-INF/applicationContext.xml]: 
    Initialization of bean failed; nested exception is 
    org.springframework.beans.factory.BeanCreationException: 

    Caused By: org.springframework.beans.factory.BeanCreationException: Error creating 
    bean with name 'entityManagerFactory'defined in ServletContext resource 
    [/WEB-INF/applicationContext.xml]: Invocation of init method failed; 
    nested exception is java.lang.NoSuchMethodError: 
    javax.persistence.spi.PersistenceUnitInfo.getSharedCacheMode()Ljavax/persistence/ 
    SharedCacheMode; 

Caused By: java.lang.NoSuchMethodError: 
javax.persistence.spi.PersistenceUnitInfo.getSharedCacheMode() 
Ljavax/persistence /SharedCacheMode; at 
org.hibernate.ejb.util.LogHelper.logPersistenceUnitInfo(LogHelper.java:38) at 
org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:525) 
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:72)  at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManage 

У меня есть следующие в applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
    <context:component-scan base-package="net.test" /> 
    <!-- Data Source Declaration --> 
    <bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
     destroy-method="close"> 
     <property name="driverClass" value="oracle.jdbc" /> 
     <property name="jdbcUrl" value="jdbc:oracle:thin:@server:1521:DB" /> 
     <property name="user" value="scott" /> 
     <property name="password" value="tiger" /> 
     <property name="maxPoolSize" value="10" /> 
     <property name="maxStatements" value="0" /> 
     <property name="minPoolSize" value="5" /> 
    </bean> 
    <bean 
     class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 
    <!-- JPA Entity Manager Factory --> 
    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="DataSource" /> 
     <property name="packagesToScan" value="net.test.entity" /> 

     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="showSql" value="true" /> 
       <property name="generateDdl" value="false" /> 
       <property name="databasePlatform" value="${jdbc.dialectClass}" /> 

      </bean> 
     </property> 
    </bean> 
    <bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" /> 
    <!-- Session Factory Declaration --> 
    <bean id="SessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="DataSource" /> 
     <property name="annotatedClasses"> 
      <list> 
       <value>net.test.entity.Department</value> 
       <value>net.test.entity.Employees</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.query.factory_class">org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory 
       </prop> 
      </props> 
     </property> 
    </bean> 
    <!-- Enable the configuration of transactional behavior based on annotations --> 
    <tx:annotation-driven transaction-manager="txManager" /> 
    <tx:annotation-driven transaction-manager="transactionManager" /> 
    <!-- Transaction Config --> 

    <bean id="txManager" 
     class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="SessionFactory" /> 
    </bean> 

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

    <context:annotation-config />  

    <bean id="hibernateStatisticsMBean" class="org.hibernate.jmx.StatisticsService"> 
     <property name="statisticsEnabled" value="true" /> 
     <property name="sessionFactory" value="#{entityManagerFactory.sessionFactory}" /> 
    </bean> 
    <bean name="ehCacheManagerMBean" 
     class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" /> 

    <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"> 
     <property name="locateExistingServerIfPossible" value="true" /> 
    </bean>  
    <bean id="jmxExporter" class="org.springframework.jmx.export.MBeanExporter" 
     lazy-init="false"> 
     <property name="server" ref="mbeanServer" /> 
     <property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING" /> 
     <property name="beans"> 
      <map> 
       <entry key="SpringBeans:name=hibernateStatisticsMBean" 
        value-ref="hibernateStatisticsMBean" /> 
       <entry key="SpringBeans:name=ehCacheManagerMBean" value-ref="ehCacheManagerMBean" /> 
      </map> 
     </property> 
    </bean> 

</beans> 

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>net.test</groupId> 
    <artifactId>myappp</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>myappp</name> 
    <url>http://maven.apache.org</url> 
    <repositories> 
     <repository> 
      <id>prime-repo</id> 
      <name>PrimeFaces Maven Repository</name> 
      <url>http://repository.primefaces.org</url> 
      <layout>default</layout> 
     </repository> 
    </repositories> 
    <properties> 
     <spring.version>3.1.1.RELEASE</spring.version> 
    </properties> 
    <dependencies> 
     <!-- Spring 3 dependencies --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</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-web</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-test</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <!-- JSF library --> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.1.6</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.1.6</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <!-- Primefaces library --> 
     <dependency> 
      <groupId>org.primefaces</groupId> 
      <artifactId>primefaces</artifactId> 
      <version>3.4.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.primefaces.themes</groupId> 
      <artifactId>afterwork</artifactId> 
      <version>1.0.8</version> 
     </dependency> 
     <!-- Hibernate library --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.1.0.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>javassist</groupId> 
      <artifactId>javassist</artifactId> 
      <version>3.12.1.GA</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.inject</groupId> 
      <artifactId>javax.inject</artifactId> 
      <version>1</version> 
     </dependency> 
     <!-- Oracle Java Connector library --> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>ojdbc6</artifactId> 
      <version>11.2.0.3</version> 
     </dependency> 
     <dependency> 
      <groupId>c3p0</groupId> 
      <artifactId>c3p0</artifactId> 
      <version>0.9.1.2</version> 
     </dependency> 
     <!-- Log4j library --> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.16</version> 
     </dependency> 
     <dependency> 
      <groupId>org.testng</groupId> 
      <artifactId>testng</artifactId> 
      <version>6.4</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-jpamodelgen</artifactId> 
      <version>1.2.0.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.1.0.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.apache.myfaces.extensions.cdi.core</groupId> 
    <artifactId>myfaces-extcdi-core-api</artifactId> 
    <version>1.0.5</version> 
    <scope>compile</scope> 
</dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-ehcache</artifactId> 
      <version>4.0.1.Final</version> 
     </dependency>  
    </dependencies> 
    <build> 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
      </resource> 
     </resources> 

     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId>    
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
        <compilerArgument>-proc:none</compilerArgument> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.bsc.maven</groupId> 
       <artifactId>maven-processor-plugin</artifactId> 
       <version>2.0.6</version> 
       <executions> 
        <execution> 
         <id>process</id> 
         <goals> 
          <goal>process</goal> 
         </goals> 
         <phase>generate-sources</phase> 
         <configuration> 
          <!-- source output directory --> 
          <outputDirectory>target/metamodel</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

В Weblogic 10.3.6 Я включил поддержку JPA2, добавив следующее в commEnv.cmd

@rem Enable JPA 2.0 functionality on WebLogic Server 
set PRE_CLASSPATH=%BEA_HOME%\modules\javax.persistence_1.1.0.0_2-0.jar; 
%BEA_HOME%\modules\com.oracle.jpa2support_1.0.0.0_2-1.jar 

Как я могу устранить эту ошибку?

+0

Возможный дубликат http://stackoverflow.com/questions/13704572/dependancy-error-result-in-nosuchmethoderror-persistenceunitinfo-getsharedcache? –

+0

@ManjulaWeerasinge Как уже упоминалось в посте у меня уже есть следующее в pom.xml ' \t \t \t org.hibernate.javax.persistence \t \t \t Hibernate-JPA-2,0-апи \t \t \t 1.0 .1.Финал \t \t « – user75ponic

+0

@Polppan: Просто из интереса, есть ли конкретная причина, по которой вы используете свой собственный пул соединений, а не используя источник данных weblogic? – beny23

ответ

1

Эта проблема была решена, для Weblogic 10.3.6 ехе распределения нет javax.persistence_1.0.0.0_2-0-0.jar, что он имеет в javax.persistence_1.1.0.0_2-0.jar.

Этот класс вместе с jpa2support_1.0.0.0_2-0.jar должен быть в пути к классу.

Благодаря

0

Возможно, проблема связана с иерархией загрузки классов, а некоторые классы загружаются из загрузчика системного класса, а не из банок, включенных в ваш EAR.

В WebLogic сервера, любой файл .jar присутствует в системе классам загружается системным загрузчиком классов WebLogic Server . Все приложения, запущенные в экземпляре сервера, загружаются в загрузчики классов приложений, которые являются дочерними элементами системного загрузчика. В этой реализации системного загрузчика классов приложения не могут использовать разные версии сторонних баннеров, которые уже присутствуют в системном загрузчике классов. Каждый дочерний загрузчик классов запрашивает родительский (системный загрузчик классов) для определенного класса и не может загружать классы, которые видят родитель.

Например, если класс с именем com.foo.Baz существует как в $ CLASSPATH, так и в приложении EAR, тогда класс из $ CLASSPATH загружается, а не тот из EAR. Поскольку weblogic.jar находится в $ CLASSPATH, приложения не могут переопределять классы WebLogic Server.

FilteringClassLoader предоставляет механизм для настройки дескрипторов развертывания, чтобы явно указать, что определенные пакеты должны всегда загружаться из приложения, а не загружаться системным загрузчиком классов.

FilteringClassLoader находится между загрузчиком класса приложения и системой. Это дочерний элемент системного загрузчика классов и родительский класс загрузчика классов приложений. FilteringClassLoader перехватывает метод loadClass (String className) и сравнивает имя класса со списком пакетов, указанным в файле weblogic-application.xml.

В заключение вы попытаетесь изменить свой weblogic-application.xml, чтобы загрузить некоторые пакеты из банок, включенных в ваш EAR, а не загрузчика системного класса? Образец Примером может служить следующее:

<prefer-application-packages> 
    <package-name>antlr.*</package-name> 
    <package-name>org.apache.commons.*</package-name> 
    <package-name>org.apache.xmlbeans.*</package-name> 
    <package-name>org.springframework.*</package-name> 
    <package-name>org.hibernate.*</package-name> 
    <package-name>javax.persistence.*</package-name> 
</prefer-application-packages> 
+0

Tolis, я не развертываю приложение на сервере Weblogic. В eclipse для разработки я настроил WLS 10.3.6 на сервере. Когда я публикую свое приложение, я получаю эти исключения. Приложение отлично работает в другом экземпляре того же исходного файла. Я установил новую WLS и на другой машине, и с этим я получаю эти исключения. – user75ponic

+0

Приложение Tolis, которое работает на WLS 10.3.6, это http://download.oracle.com/otn/nt/middleware/11g/wls/1036/wls1036_dev.zip, а тот, который не работает, - это http: // download. oracle.com/otn/nt/middleware/11g/wls/1036/wls1036_win32.exe на этой странице [http://www.oracle.com/technetwork/middleware/ias/downloads/wls-main-097127.html) – user75ponic

+0

Я решил проблему, см. Мой ответ. В любом случае спасибо. – user75ponic

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