- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个奇怪的问题。
我的应用程序结构简单,如下所示:包含 Web 模块 (WAR) 的 EAR。
我将特定的应用程序 jar 放入 EAR 的 lib 目录中,然后将其引用到 WAR 模块的 MANIFEST 中。
我在WAR的lib目录下还有另一个jar,这个jar包含一个servlet。
当我启动服务器并完全发布我的应用程序时,一切都很好,但在运行时阶段,当我调用应用程序的入口点时,我收到有关此 servlet 的 ClassNotFound 错误。 (也许 servlet 使用我的应用程序 jar 中包含的类,该类包含在 EAR lib 中)
相反,如果我将特定的应用程序 jar 与另一个 jar(包含 servlet 的 jar)一起放入 WAR 的 lib 目录中,我不会收到任何类型的错误(即使在运行时)。
但是我需要将我的应用程序 jar 维护到 EAR 的 lib 目录中。
我对其他类型的 jar 没有问题,也许本例中的问题与 servlet 有关?类加载隔离?不知道?:(
有什么建议吗?我能做什么?
我尝试了有关 jboss-classloading.xml 的多种类型的配置,但没有成功..
PS:使用另一种类型的应用程序服务器(例如 websphere)我没有任何问题,我可以将 jar 维护到 EAR lib 目录中。
假设:每个类都会使用它自己的类加载器来加载其他类。因此,如果 ClassA.class 引用 ClassB.class,则 ClassB 需要位于 ClassA 的类加载器或其父类的类路径上。
如果我将有关 jar 的类路径依赖项添加到 WAR/lib 的 list 中,那么 war 中的类怎么可能看不到 EAR/lib 中的类?
我快要疯了...缺少另一种类型的设置吗?有安全设置吗?
堆栈跟踪:
{java.lang.NoClassDefFoundError: it/myapp/services/servlets/Dispatcher}|
at it.myapp.services.contexts.ContextManager.configureSet(ContextManager.java:2972)}
at it.myapp.services.servlets.Dispatcher.getSession(Dispatcher.java:1344)}
at it.myapp.services.servlets.Dispatcher.service(Dispatcher.java:5139)}
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)}
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)}
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)}
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)}
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)}
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)}
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145)}
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)}
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)}
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336)}
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)}
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)}
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920)}
at java.lang.Thread.run(Thread.java:722)}
Caused by: java.lang.ClassNotFoundException: it.myapp.services.servlets.Dispatcher from [Module "deployment.MyEAR.ear:main" from Service Module Loader]}
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:196)}
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:444)}
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:432)}
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:374)}
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:119)}
... 17 more}
这个问题似乎与类加载可见性有关......这很奇怪。 :(
Dispatcher 是一个打包在 WAR/lib 中的 jar 中的 servlet 类,该类调用包含在 EAR/lib 中的 jar 中的另一个类 (ContextManager)。在 WAR/lib 的 list 中,我已将 jar 正确添加到 EAR/lib 的类路径中。抱歉...也许问题是相反的,即 EAR 的 jar 中的类似乎无法看到 WAR 中的 servlet 类...是否可以消除此限制?我不想把所有的 jar 都投入 war ......
提前致谢。
IlPistolero。
最佳答案
在我们的项目中,我们有这样的结构( test.ear
包含两个模块 test.ejb.jar
和 test.web.war
):
test.ear
+-- lib (contains 3rd party libs)
+-- META-INF
| +-- application.xml (lists modules test.web.war and test.ejb.jar)
| +-- MANIFEST.MF
+-- test.ejb.jar
| +-- META-INF
| | +- ejb-jar.xml
| +-- com (root package of all ejb .class files)
| +-- ...
+-- test.web.war
+-- META-INF
| +-- MANIFEST.MF (Class-Path: test.ejb.jar)
+-- WEB-INF
| +-- classes
| | +-- com (root package of all war .class files)
| | +-- ...
| +-- lib (3rd party libs only used by .war)
| +-- web.xml
+-- index.html
test.ear/lib
内.jar文件的类可由 test.ejb.jar
使用和test.web.war
.
关于java - EAP 6.1 中的类加载问题 - JBoss 7.2/WAR 类看不到 EAR 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19022178/
有人可以解释一下什么是 exploded EAR 吗?我检查了谷歌但找不到明确的答案。是不同的格式吗? 与非 exploded EAR 有什么区别? 最佳答案 压缩的 EAR 文件,扩展名为 .ear
我在单个域下有 2 个 .ear 文件(例如:abc.ear、def.ear)。他们之间如何沟通? 最佳答案 您可以使用Remote Method Invocation 。通常,应用程序的 Bean
我的 gradle 模块具有以下文件夹结构: src main application META-INF applica
基本上,我遇到一种情况,我必须从另一个 EAR 中的 WAR 访问一个 EAR 中 JAR 中声明的 EJB。两个 EAR 都部署到同一 WebLogic 托管服务器(同一域)。 Java 代码中的
假设我有一个标准的 EAR 文件(以及用于生成它的源文件),需要进行哪些额外的处理才能将其转换为 IBM WebSphere“增强型 EAR”? 问这个问题的另一种方法是问“增强型 EAR 和标准 E
我正在尝试使用 gradle build 构建 ear 并且 ear 构建良好。在我的项目中,ejb 模块正在创建多个自定义 jar 以及 ejb jar 。如何将它们添加到 ear 根目录而不是将它
你可以将一个耳朵文件放入另一个耳朵文件中吗?我尝试将 Ear 依赖项添加到 Ear 模块,指定 Artifact 类型为 ear 使用maven 3.3.3,但我得到 Failed to initia
我有两个.Ear 文件,即A.EAR 和B.EAR。第一个文件是我的应用程序(大约 1.5 MB),第二个文件包含所有需要的库,例如 Hibernate、log4j 等(大约 70 MB)。我怎样才能
我在尝试从另一个 EAR 调用部署在一个 EAR 中的远程服务时遇到问题。我没有为我的 EJB 指定任何名称,无论它们是 @Local 还是 @Remote,因此只需使用注释并通过 @EJB 注入(i
在 jenkins 上执行 mvn install 时出现此错误: [JENKINS] Archiving disabled Waiting for Jenkins to finish collect
我有两个 Spring 应用程序 A 和 B,每个应用程序都位于一个单独的 EAR 文件中。现在我想从 A 调用到 B,反之亦然,甚至可能是 A -> B -> A 或更多。 调用必须交易安全。 推荐
我的项目结构如下。服务器是 Glassfish 4。IDE - netbeans 7.4。项目 temp 被项目 a 使用。 EAR + lib/temp.jar + a.war Temp.jar
我需要在使用 maven-ear-plugin 生成的 EAR 中添加 2 个 XML 文件。 不幸的是,我还没有看到将任意文件添加到 EAR 的方法。 documentation该插件的内容为“EA
我们有无数次 war 的解决方案。 war 在它们都使用hibernate和spring的意义上是相似的。这意味着我们在每场 war 中都有许多相同的 jar 。这正在成为一个问题,因为耳朵的大小开始
Desperatley 尝试使用 Maven 3 中的 Maven EAR 插件版本 2.10.1 来创建包含某些模块的 EAR bundle 。generate-application-xml 目标
我有一个 EAR,在上下文“/”中部署为生产环境。 我想在服务器上部署应用程序的测试版本,同一个 Glassfish 实例。 是否可以在同一实例中的不同上下文和端口下部署应用程序? 如果是这样,除了更
Gradle 构建脚本会创建一个 EAR 文件,其中包含一些 jars 和一个 war。这一切之前都是在 Maven 中完成的,现在是迁移到 Gradle 的主题。 环境: Gradle 1.12 G
我用 Java EE 创建了一个应用程序现在想在互联网上发布它。出于这个原因,我需要 EAR文件。但我无法找到它。 我搜索了每个目录,但我看不到它。 EAR在哪里文件留在文件目录? 我用 Eclips
我正在使用Gradle,并且想要构建一个EAR,其中包括在存储库中找到的预构建的WAR文件。我有这样的事情: dependencies { earlib 'PathName:NameOfPre
我有一个java Ear存档,其中包含“lib”文件夹,在application.xml中声明为库目录。 我的问题是某些模块不需要 lib 文件夹中的某些 jar。此外,我的模块之一(.war 存档)
我是一名优秀的程序员,十分优秀!