2015-03-25 77 views
1

我试图设置一个Spring MVC + Hibernate WAR来部署到Jboss 7.1.1 Final。我的应用程序使用Hibernate 3.6.1 &到目前为止,我的理解是Hibernate 4与AS一起打包,并且是默认的持久性提供程序。我没有使用persistent.xml文件配置。在Jboss7中配置休眠3

我遵循了在JBoss中设置Hibernate 3所需的所有步骤。

  1. 转到AS安装并更改到modules/org文件夹。
  2. 为时隙3以保持休眠3
  3. 复制Hibernate3的罐子到这个新的AS /模块创建文件夹/组织/休眠/ 3夹 (Hibernate3中-core.jar添加下,Hibernate-公地annotations.jar,hibernate3- entitymanager.jar,dom4j.jar,slf4j.jar,slf4j-api.jar,commons-collections.jar,antlr.jar,slf4j-api.jar,commons-collections.jar,antlr.jar和Hibernate所需的任何其他jar 3)
  4. 创建的AS /模块/组织/休眠/ 3/module.xml与内容文件:

    <?xml version="1.0" encoding="UTF-8"?> 
    <module xmlns="urn:jboss:module:1.0" name="org.hibernate" slot="3"> 
        <resources> 
         <resource-root path="hibernate3-core.jar"/> 
         <resource-root path="hibernate3-commons-annotations.jar"/> 
         <resource-root path="hibernate3-entitymanager.jar"/> 
         <resource-root path="javassist-3.12.0.GA.jar"/> 
         <resource-root path="antlr-2.7.6.jar"/> 
         <resource-root path="commons-collections-3.1.jar"/> 
         <resource-root path="dom4j-1.6.1.jar"/> 
         <!-- Insert other Hibernate 3 jars to be used here --> 
        </resources> 
    
        <dependencies> 
         <module name="org.jboss.as.jpa.hibernate" slot="3"/> 
         <module name="asm.asm"/> 
         <module name="javax.api"/> 
         <module name="javax.persistence.api"/> 
         <module name="javax.transaction.api"/> 
         <module name="javax.validation.api"/> 
         <module name="org.apache.ant"/> 
         <module name="org.infinispan"/> 
         <module name="org.javassist"/> 
         <module name="org.slf4j"/> 
        </dependencies> 
    </module> 
    

我的pom.xml(部分):

<!-- Hibernate dependencies --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>3.6.6.Final</version> 
     <exclusions> 
      <exclusion> 
       <groupId>xml-apis</groupId> 
       <artifactId>xml-apis</artifactId> 
      </exclusion> 
     </exclusions> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-annotations</artifactId> 
    <version>3.5.6-Final</version> 
</dependency> 
<dependency> 
    <groupId>javax.persistence</groupId> 
    <artifactId>persistence-api</artifactId> 
    <version>1.0.2</version> 
</dependency> 
<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>3.0.0.ga</version> 
    </dependency> 
    <dependency> 
    <groupId>org.hibernate.common</groupId> 
    <artifactId>hibernate-commons-annotations</artifactId> 
    <version>4.0.5.Final</version> 
    </dependency> 

我休眠-context.xml的(部分)

<jpa:repositories base-package="com.gea.dvr.repository" /> 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" 
       p:dataSource-ref="dataSource" 
       p:configLocation="${hibernate.config}" 
       p:packagesToScan="com.iana.dver"/> 

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" 
       p:driverClass="${app.jdbc.driverClassName}" 
       p:jdbcUrl="${app.jdbc.url}" 
       p:user="${app.jdbc.username}" 
       p:password="${app.jdbc.password}" 
       p:idleConnectionTestPeriod="30" 
       p:maxPoolSize="100" 
       p:maxStatements="50" 
       p:minPoolSize="10" 
       p:maxIdleTime="60" /> 

    <!-- Declare a transaction manager--> 
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" 
       p:sessionFactory-ref="sessionFactory" />      

    <!-- Specify our ORM vendor --> 
    <bean id="hibernateVendor" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
       p:showSql="false"/> 

我的hibernate.cfg.xml

<hibernate-configuration> 
    <session-factory name="sessionFactory"> 
    <!-- We're using MySQL database so the dialect needs to MySQL as well--> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <!-- Enable this to see the SQL statements in the logs--> 
    <property name="show_sql">false</property> 
    <!-- This will drop our existing database and re-create a new one. 
      Existing data will be deleted! --> 
    <!-- <property name="hbm2ddl.auto">update</property>--> 

    <mapping class="com.gea.dvr.domain.DvrUserType"/> 
    <mapping class="com.gea.dvr.domain.DvrUsers"/> 
    <mapping class="com.gea.dvr.domain.DvrConfig"/> 
    <mapping class="com.gea.dvr.domain.DvrDetail"/> 
    <mapping class="com.gea.dvr.domain.DvrFiles"/> 
    <mapping class="com.gea.dvr.domain.DvrNotif"/> 
    <mapping class="com.gea.dvr.domain.UserLogin"/> 
    </session-factory> 
</hibernate-configuration> 

我已经提供了所有需要java仍然我仍然得到异常, 任何人都可以帮助我在JBoss中设置hibernate 3相关的变化?

11:03:14,597 ERROR [org.springframework.web.context.ContextLoader] (MSC service thread 1-3) Context initialization failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateVendor' defined in ServletContext resource [/WEB-INF/hibernate-context.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence 

回答

1

既然你得到一个java.lang.NoClassDefFoundError(而不是一个ClassNotFoundException),它可能是某种形式的类加载问题。

尝试添加将解决您的问题的hibernate-entitymanager依赖项。

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>${hibernate.version}</version> 
    <exclusions> 
     <exclusion> 
      <groupId>cglib</groupId> 
      <artifactId>cglib</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>dom4j</groupId> 
      <artifactId>dom4j</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
+0

我试过你的解决方案,它的工作完美。 – 2015-03-25 10:13:44