@EJB 依赖注入无法将 Object 类转换为 Object$view29

@EJB dependency injection cannot classcast Object to Object$view29

我通过将 EJB 包移动到 WEB 模块而不是 EJB 模块来修复它。有人知道为什么吗?

我不断收到以下错误。它说 EditEnterpriseSessionBean 与 EditEnterpriseSessionBean$$$view81 不同class。

错误由三部分组成:

21:18:36,880 ERROR [io.undertow.request] (default task-40) UT005023: Exception handling request to /EntWeb/ListEnterprisesServlet: javax.servlet.ServletException: UT010013: Could not instantiate ListEnterprisesServlet [..]

Caused by: java.lang.IllegalStateException: WFLYEE0042: Failed to construct component instance [..]

Caused by: java.lang.IllegalArgumentException: Can not set EditEnterpriseSessionBean field ListEnterprisesServlet.edtEnterprise to EditEnterpriseSessionBean$$$view81 at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167) at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81) [...]

你对此有什么想法吗?

提前致谢!

完整堆栈跟踪:

Context Path:/EntWeb
Servlet Path:/AddOrderServlet
Path Info:null
Query String:null
Stack Trace
javax.servlet.ServletException: UT010013: Could not instantiate AddOrderServlet
io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:227)
io.undertow.servlet.core.ManagedServlet.getServlet(ManagedServlet.java:169)
io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:72)
io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:282)
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:261)
io.undertow.servlet.handlers.ServletInitialHandler.access[=10=]0(ServletInitialHandler.java:80)
io.undertow.servlet.handlers.ServletInitialHandler.handleRequest(ServletInitialHandler.java:172)
io.undertow.server.Connectors.executeRootHandler(Connectors.java:199)
io.undertow.server.HttpServerExchange.run(HttpServerExchange.java:774)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)

当您有单独的 ejb 和 war 模块时,您应该使用远程接口。如果在 war 模块中包含 ejb 模块,将创建两个 ejb bean。 ear中打包的ejb和war模块中包含的jar文件中的另一套。

在运行时,这是混乱的,因为具有不同类加载器的两组 bean 可用于您的 war 模块

为了能够使用@Local 接口,请确保该接口仅在 ear 文件的 lib 文件夹中,而不是在 war 文件中的 lib 中。如果您使用的是 Maven,则可以将依赖范围设置为为 war 项目的 pom 文件提供。