当前位置: 首页 > 面试题库 >

如何使用Hibernate支持的JPA在tomcat中运行Spring 3.0 PetClinic

燕元明
2023-03-14
问题内容

对于正确的过程,请参阅Pascal的答案。

我的错误(由于未禁用LoadTimeWeaving)过程供参考。

我做了什么:

  1. 下载了Tomcat 6.0.26和Spring 3.0.1
  2. 从https://src.springframework.org/svn/spring-samples/petclinic下载了PetClinic
  3. 建立并部署了petclinic.war。使用默认的JDBC持久性很好。
  4. 编辑了webapps / WEB-INF / spring / applicationContext-jpa.xml并将其设置jpaVendorAdaptor为Hibernate
  5. 编辑了webapps / WEB-INF / web.xml,并将其context-param从applicationContext-jdbc.xml 更改为applicationContext-jpa.xml
  6. 将Spring 3.0.1发行版中的所有内容复制到TOMCAT_HOME / lib。
  7. 推出了tomcat。锯

引起原因:java.lang.IllegalStateException:ClassLoader [org.apache.catalina.loader.WebappClassLoader]不提供’addTransformer(ClassFileTransformer)’方法。指定一个自html" target="_blank">定义LoadTimeWeaver或使用Spring的代理启动Java虚拟机:-javaagent:spring-agent.jar

  1. <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>webapps / META-INF / context.xml中的未注释行。

  2. 同样的错误。将该行添加到TOMCAT_HOME / context.xml

  3. 部署没有错误。但是,当我做某事时,它将发出一个错误消息,说

java.lang.NoClassDefFoundError: javax/transaction/SystemException at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:39)

  1. 根据scaffman的建议,将javax.transaction的范围从测试更改为默认(只是删除了测试)。

  2. 运行良好!! 谢谢!


问题答案:

这是我所做的:

  1. 获取Tomcat 6.0.26
  2. 检出petclinic样本:
svn co https://src.springframework.org/svn/spring-samples/petclinic/trunk/ petclinic
  1. cd 进入petclinic目录

  2. 修改src/main/webapp/WEB-INF/spring/applicationContext-jpa.xml以使用Hibernate:

  3. 注释<context:load-time-weaver>(加载时编织程序不应与Hibernate一起使用,这是用于Toplink的)
  4. 将Hibernate声明为jpaVendorAdapter(注释Toplink部分,取消注释Hibernate部分)
  5. 修改src/main/webapp/WEB-INF/web.xml以使用applicationContext-jpa.xml
  6. 修改pom.xml以在战争中捆绑jta.jar(如@skaffman所指出):
<dependency>
  <groupId>javax.transaction</groupId>
  <artifactId>com.springsource.javax.transaction</artifactId>
  <version>1.1.0</version>
  <!--scope>test</scope-->
</dependency>
  1. 建立战争
mvn install
  1. 将其部署到Tomcat
cp target/petclinic.war $TOMCAT_HOME/webapps
  1. 浏览

http://localhost:8080/petclinic



 类似资料:
  • 我很清楚Java 7默认不支持基于GCM的密码。因此,我试图通过Bouncy Castle完成这项工作。 我在Tomcat的HTTPS连接器中配置了以下密码: 密码=“我们的研究结果是,他们的研究结果是一个有128个字符的CBC共有256个,他们的研究结果是一个有128个字符的RSA的研究结果是一个有128个字符的CBC共有256个,他们的研究结果是一个有128个字符的CBC共有128个字符的CB

  • 我的应用程序的Thymeleaf配置设置为: OS(CentOS 7)默认编码是UTF-8,所有生成的文件都使用UTF-8编码。我似乎仍然不能正确地显示字符。我尝试了一堆在这里找到的建议,但没有用。 根据这里的一些建议,我还尝试在Spring Security配置中在之前设置。此外,该应用程序还保存了带有奇怪字符的数据。 我的securitu配置从以下内容开始: 我错过了什么?

  • 问题内容: 我有一个使用SchemaUpdate的主要方法,可以在控制台上显示要更改/创建的表,并且在我的Hibernate项目中可以正常工作: 我想在JPA项目中重用此代码,它没有hibernate.cfg.xml文件(也没有.properties文件),但是有一个persistence.xml文件(如JPA规范指定的在META- INF目录中自动检测到) 。 我尝试了这种过于简单的调整, 但由

  • 问题内容: 目前我使用带。我尝试搜索,但找不到,任何版本的hibernate支持任何人列出? 问题答案: 根据Hibernate的版本列表,版本4.3或5.0将支持JPA 2.1。

  • JPA 3.0于2020年11月发布,我想大多数JPA提供商(Hibernate、EclipseLink、OpenJPA)仍然支持JPA 2.2。是否有迁移到新版本的计划?这将不是那么简单,因为,例如,顶级包已经更改(javax.persistence-

  • 我正在实现一个基于实体属性值的持久化机制。所有数据库访问都是通过Hibernate完成的。我有一个包含节点路径的表,它非常简单,只有一个id和一个路径(字符串)。路径数量很少,大约几千条。 主表有数百万行,我没有重复路径,而是将路径规范化为它们自己的表。以下是我在插入主表时想要的行为 1)检查路径表中是否存在路径(通过实体管理器查询,使用路径值作为参数) 2) 如果不存在,则插入并获取id(通过实