我有一个Spring mvc应用程序,它使用openjpa 2.1.1作为它的持久性框架。它在STS中作为Maven项目开发,并在vFaric TC Server(Tomcat 7)上本地运行。
当我们首次将war部署到Websphere 8.5时,我们遇到了类加载器与war文件中的以下3个openjpa JAR冲突:
geronimo-jpa_2.0_spec-1.1。jargeronimo-jta_1.1_spec-1.1。jar验证-api-1.0.0。加罐
将这些从war中删除并推迟到WebSphere捆绑的openjpa工作得很好,所以我将openjpa POM依赖范围从“编译”改为“提供”(这样这些jar就不会打包到war文件中)。
由于Tomcat 7不JavaEE兼容,所以我将3个jars放在Tomcat\lib中(也尝试了包装tomcat的vburd-tc-server lib),但是JPA类在启动时应用程序不可见(控制台中没有异常)。
我还尝试将JAR从STS中的“启动配置”添加到服务器类路径中,但也没有成功。
是否需要在Tomcat中的某个地方设置类装入器顺序,以便JPA在应用程序之前装入?
我需要的是一个可以在部署到Tomcat或WebSphere时工作的构建。
任何帮助都将不胜感激。
@首先,您需要在Maven pom中定义单独的概要文件。为WAS定义一个配置文件,并通过以下方式使用其OpenJPA依赖项:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
这就是我如何使用与WASV8. x. x捆绑的OpenJPA-2.1.1-SNAPSHOT二进制文件
为Tomcat定义另一个Maven概要文件,该概要文件显式地获取除Tomcat提供的少数JavaEE相关规范之外所需的所有依赖项。因此,将OpenJPA-2.1.1-SNAPSHOT定义为依赖项(当然不是“提供的”)。
现在,对于在部署到Tomcat的war项目中引导JPA(不使用Spring),我通常创建如下类:
@WebListener
public class ApplicationLifeCycleListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
...
// Do some OpenJPA bootstrapping here
// Get an EntityManager.
EntityManager em = PersistenceUtil.getEntityManager();
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
//throw new UnsupportedOperationException("Not supported yet.");
PersistenceUtil.closeEntityManagerFactory();
}
}
这就是我对引导Hibernate/JPA所做的。我的PersistenceUtil处理EntityManager工厂的创建、EntityManager的交付等。
您可能需要考虑TomEE。当涉及到JPA时,它将为您提供与WebSphere 8. x. x相同的功能。两者都严重依赖Apache产品。WebSphere8. x. x和TomEE将允许您使用EJB3. x,无论是否加上CDI,它都更容易与JPA实现一起使用。使用Tomcat,您必须担心自己处理事务管理,或者弄清楚如何利用CDI或Spring来管理您的事务。
如果这对任何人都有帮助的话,NoClassDefFoundError指的是一个JPA类,但不是我包含的3个JAR中的任何一个。我运行了mvn树,发现整个JPA依赖链是:
openjpa-2.1.1。jarcommons-lang-2.4。jarcommons-collections-3.2.1。jargeronimo-jta_1.1_spec-1.1。jargeronimo-jpa_2.0_spec-1.1。罐子
我还需要补充:
serp-1.12.0.jar
我最初包含验证api-1.0.0。Tomcat/lib中的GA. jar也是如此,因为它必须从战争中删除才能让webphere工作,但是将它放在tomcat/lib中会导致“javax.validation.验证异常:无法找到默认提供商”,所以我把它拿出来,意思就是上面6个需要添加罐子。
本文向大家介绍如何让tomcat服务增加java启动命令,包括了如何让tomcat服务增加java启动命令的使用技巧和注意事项,需要的朋友参考一下 我的第一个服务端程序 最近在学习写网络游戏,所以要写服务器端程序,我找了一圈,PHP,JAVA,C,最后为了与阿里云和腾讯云的兼容性好,成本低廉以及学习难度低,我选择了java。 然后开始学习怎么写java的class。以及怎么连接数据库,怎么实现隔几
我正在使用selenium web驱动程序3.4.0查找网站的响应时间。在较早的版本中,我使用了WebDriver wait=new WebDriverWait(driver,10);Wait.Until(ExpectedConditions.VisibilityOfElementLocated(By.id(“myid”)));查找加载的页面。 但这两行代码不适用于版本3.4.0。有没有其他方法可
我阅读了如何在Tomcat中添加本机库?和类似的问题,但重点是这不是单个Tomcat实例,而是某种共享的tomcat运行多个实例。(“雄猫农场”可能不正确) 所以我在/data/tomcat-home/tomcat7-x-x/myapp中的结构: 垃圾箱/(空) catatlina.propertiesserver.xmlweb.xml lib/(一些罐子) 日志/ Webapps/(ROOT/c
问题内容: 我喜欢jQueryUI的对话框。但是,似乎没有一种动态加载内置内容的方法。我想我必须使用其他方法来实现这一目标?iframe仅在可见时才会加载内容吗?这是正确的方法吗? 如果其他对话框机制更适合仅在首次打开时加载内容,则我愿意接受。 问题答案: 这并非难事-仅此而已,我不会开始与iframe搞混。这样的事情怎么样? 基本上,您创建对话框,然后打开对话框,从服务器中加载一个html文件,
问题内容: 如何让CodeIgniter使用SSL加载特定页面?我有一个apache2 / 服务器。使用与非安全页面不同的文档根目录。例如,https(端口443)服务的页面不多,http(端口80)服务的页面不多。我如何让CodeIgniter在此设置中表现出色? 问题答案: 解决此问题的方法很少。 选项1: 我可能会将代码部署到两个文件夹中,然后在文件:/system/application/
当我试图部署我的discord bot程序时,什么也没有发生,日志是这样写的: 我的Procfile位于存储库的根中,它有一行代码: 我在youtube上学习如何让我自己的不和机器人在Heroku上运行,我完美地复制了一切。完全相同的项目在Intellij中运行,没有错误。我如何让Heroku找到并加载我的程序?