我是EAR的新手。我已经开发了一个功能相互依赖的Web模块和ejb模块。为此,我试图将它们配置在EAR中。我将web和ejb模块都映射到EAR,可以看到application.xml为
<display-name>EBS-ear</display-name>
<module>
<ejb>EBS-ejb.jar</ejb>
</module>
<module>
<web>
<web-uri>EBS-web.war</web-uri>
<context-root>EBS-web</context-root>
</web>
</module>
</application>
但是当我尝试执行EAR时,我的服务器抛出以下异常
23:58:29,606 ERROR [io.undertow.request] (default task-5) UT005023: Exception handling request to /EBS-web/: java.lang.NoClassDefFoundError: com/ebs/service/UserAuthorisationService
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getConstructor(Unknown Source)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(XmlConfigurationProvider.java:480)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addAction(XmlConfigurationProvider.java:429)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:556)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:295)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:112)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:264)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67)
at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:967)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:435)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:479)
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57)
at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:111)
at org.wildfly.extension.undertow.security.RunAsLifecycleInterceptor.init(RunAsLifecycleInterceptor.java:84)
at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:97)
at io.undertow.servlet.core.ManagedFilter.createFilter(ManagedFilter.java:80)
at io.undertow.servlet.core.ManagedFilter.getFilter(ManagedFilter.java:66)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
at io.undertow.jsp.JspFileHandler.handleRequest(JspFileHandler.java:32)
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.ebs.service.UserAuthorisationService from [Module "deployment.EBS-web.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)
... 61 more
从上面我可以理解,EAR无法定位EJB模块中存在的类,因此引发异常。我正在使用WildFLy 10服务器和Eclipse IDE。
EAR文件只是各种企业模块(EJB jar,WAR文件和常规jar文件)的容器,这些容器具有一些定义明确(但常常被误解)的规则,哪些类可以看到哪些规则。
在大多数情况下,您将看到具有以下内部结构的EAR文件:
EAR
\-lib
| \- utilityA.jar
| \- utilityB.jar
| \- ...
|- ejb-jarC.jar
|- ejb-jarD.jar
|- ...
|- warE.jar
|- warF.jar
|- ...
出于类可见性的考虑,该EAR上面显示了五个模块:
哪里:
通常,每个模块都有自己的类加载器。
现在,JBossAS / WildFly放宽了类可见性规则,以使开发人员的生活更简单(并且出于历史原因)。在这些服务器实现上,规则是:
更严格的实现将需要定义清单类路径条目,以使EJB模块和WAR模块彼此可见。
现在,鉴于上述所有情况,您的特定问题很可能是以下情况之一:
综上所述,由于您使用的是JavaEE 7服务器,因此可以使您的生活更加轻松。
只需将包括EJB在内的所有内容打包到WAR文件中。您可能没有从构建和部署EAR中获得任何好处
但是当我尝试执行EAR时,我的服务器抛出异常 从上面我可以理解的是,EAR无法定位EJB模块中存在的类,因此抛出异常。我使用的是Wildfly10服务器和eclipse IDE。
问题内容: 我有一个python项目(我在virtualenv中运行),其结构如下: script.py 我使用以下命令从venv激活运行项目,并从Project目录中运行该项目: 该脚本会运行,但是在退出之前会发出以下错误: 我试过运行python shell并尝试从那里导入模块,但没有出错。我在src的每个目录中都有_ _init__.py。python是否将工作目录视为src / scrip
问题内容: 我最近在计算机上安装了cx_Oracle模块,以连接到远程Oracle数据库服务器。(我身边没有Oracle客户端)。 Python:2.7 x86版 Oracle:版本11.1.X x64 Cx_Oracle:版本5.1.2-11g.win32-py2.7 然后,每次我运行脚本时,脚本都会失败并显示以下消息: ImportError:DLL加载失败:找不到指定的模块。 我想知道是否我
问题内容: 我收到错误,无法在Node.js应用程序中找到模块“ bcrypt” 我尝试使用 npm install bcrypt 安装它, 但仍然出现问题。 错误信息: 问题答案: 使用命令无法为我解决问题。 我尝试了以下命令,但问题解决了。
问题内容: 我是Python的初学者。在开始之前,这是我的Python文件夹结构 在下面,我有一个名为的文件夹,其中有一个Python文件,其内容如下: 接下来,我位于文件夹中,位于上一级: 每当我运行它都会导致错误 我有什么想念的吗? 问题答案: Python中的所有模块都必须具有特定的目录结构。您可以在此处找到详细信息。 在目录下创建一个空文件,使您的目录结构如下所示: 同样在文件中,将imp
我有个问题, 我试图在apple store上发布我的应用程序的新版本,但它给出了这个问题: 找不到模块“firebase_analytics” 有人经历过这个吗? 找不到模块“firebase_analytics”