在类库中使用@Inject注入EJB [英] Injecting EJBs using @Inject in class library
问题描述
该应用程序包含一个名为ProjectLibrary的类库,它被添加到两个模块中,即EE模块和Web模块。 IDE以图形方式显示了基本的树结构如下:
需要将EJB注入到JPA实体侦听器中,如下所示。
@ApplicationScoped
public class EntityListener {
@Inject
private Event< EntityChangeEvent>事件;
@EJB
私人UserService服务;
@PostPersist
@PostUpdate
@PostRemove
public void onEntityChange(Entity entity){
event.fire(new EntityChangeEvent(Collections.singleton(service .getOwner(实体))));
}
}
此监听器存在于EE项目和类中图书馆。
UserService
是无状态的本地EJB。除非 @EJB
的注释替换为 @Inject
,否则抛出以下异常: / p>
严重:生命周期处理中的异常
org.glassfish.deployment.common.DeploymentException:CDI部署失败:WELD-001408 :类型为UserService的不满足依赖关系在注入点的@Default
[BackedAnnotatedField] @Inject private entity.listeners.EntityListener.service
在entity.listeners.EntityListener.service(EntityListener.java:0)
在org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:234)
在org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
在org。 glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:328)
在com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:496)
在com.sun。 enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219 )
在org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
在com.sun.enterprise.v3.admin.CommandRunnerImpl $ 2 $ 1.run(CommandRunnerImpl.java:539 )
在com.sun.enterprise.v3.admin.CommandRunnerImpl $ 2 $ 1.run(CommandRunnerImpl.java:535)
在java.security.AccessController.doPrivileged(本机方法)
在javax .security.auth.Subject.doAs(Subject.java:360)
在com.sun.enterprise.v3.admin.CommandRunnerImpl $ 2.execute(CommandRunnerImpl.java:534)
在com.sun。 enterprise.v3.admin.CommandRunnerImpl $ 3.run(CommandRunnerImpl.java:565)
在com.sun.enterprise.v3.admin.CommandRunnerImpl $ 3.run(CommandRunnerImpl.java:557)
在java。 security.AccessController.doPrivileged(Native Method)
在javax.security.auth.Subject.doAs(Subject.java:360)
在com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl .java:556)
在com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRu nnerImpl.java:1464)
在com.sun.enterprise.v3.admin.CommandRunnerImpl.access $ 1300(CommandRunnerImpl.java:109)
在com.sun.enterprise.v3.admin.CommandRunnerImpl $ ExecutionContext .execute(CommandRunnerImpl.java:1846)
at com.sun.enterprise.v3.admin.CommandRunnerImpl $ ExecutionContext.execute(CommandRunnerImpl.java:1722)
at com.sun.enterprise.v3.admin .AdminAdapter.doCommand(AdminAdapter.java:534)
在com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
在org.glassfish.grizzly.http.server 。com.un.enterprise.v3.services.impl.ContainerMapper $ HttpHandlerBase.service .v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
在org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
在org.glassfish .grizzly.http.server.HttpHandler.doHandle (HttpHandler.java:175)
在org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
在org.glassfish.grizzly.filterchain.ExecutorResolver $ 9.execute( ExecutorResolver.java:119)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java: 201)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
在org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
在org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
在org .glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
在org.glassfish.grizzly.strategies.WorkerThreadIO Strategy.run0(WorkerThreadIOStrategy.java:117)
在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access $ 100(WorkerThreadIOStrategy.java:56)
在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable .run(WorkerThreadIOStrategy.java:137)
在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:565)
在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker .run(AbstractThreadPool.java:545)
在java.lang.Thread.run(Thread.java:745)
导致:org.jboss.weld.exceptions.DeploymentException:WELD-001408:不满意type为UserService类型的依赖关系@Default
在注入点[BackedAnnotatedField] @Inject private entity.listeners.EntityListener.service
在entity.listeners.EntityListener.service(EntityListener.java:0)
在org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:370)
在org.jbo ss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:291)
在org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:134)
在org.jboss.weld。 bootstrap.Validator.validateRIBean(Validator.java:165)
在org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:529)
在org.jboss.weld.bootstrap.Validator。 validateBeans(Validator.java:515)
在org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:490)
在org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup。 java:419)
在org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:90)
在org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:225)
... 41更多
严重:加载应用程序时异常
严重:上下文中的部署失败/ Project-war
更精细:初始化identitymaps
警告: session_manager_no_partition
信息:没有定时器要删除id:94539 334950977536
信息:没有定时器要删除id:94539334950977536
严重:加载应用程序时异常:CDI部署失败:WELD-001408:类型为UserService的限制符的不满足的依赖项@Default
at注入点[BackedAnnotatedField] @Inject private entity.listeners.EntityListener.service
在entity.listeners.EntityListener.service(EntityListener.java:0)
org.jboss.weld.exceptions.DeploymentException:WELD- 001408:类型为UserService的不满足依赖关系在注入点的@Default
[BackedAnnotatedField] @Inject private entity.listeners.EntityListener.service
在entity.listeners.EntityListener.service(EntityListener.java:0)
在org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:370)
在org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:291)
在org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validato r.java:134)
在org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:165)
在org.jboss.weld.bootstrap.Validator.validateBean(Validator.java: 529)
在org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:515)
在org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:490)
在org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:419)
在org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:90)
在org .glassfish.weld.WeldDeployer.event(WeldDeployer.java:225)
在org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
在org.glassfish.internal.data .ApplicationInfo.load(ApplicationInfo.java:328)
在com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:496)
在com.sun.enterprise.v3.server应用程序ommand.execute(DeployCommand.java:491)
在com.sun.enterprise.v3.admin.CommandRunnerImpl $ 2 $ 1.run(CommandRunnerImpl.java:539)
在com.sun.enterprise.v3。 admin.CommandRunnerImpl $ 2 $ 1.run(CommandRunnerImpl.java:535)
在java.security.AccessController.doPrivileged(本机方法)
在javax.security.auth.Subject.doAs(Subject.java:360 )
在com.sun.enterprise.v3.admin.CommandRunnerImpl $ 2.execute(CommandRunnerImpl.java:534)
在com.sun.enterprise.v3.admin.CommandRunnerImpl $ 3.run(CommandRunnerImpl.java :565)
com.sun.enterprise.v3.admin.CommandRunnerImpl $ 3.run(CommandRunnerImpl.java:557)
java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:360)
在com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556)
在com.sun。 enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464)
在com.sun.enterprise.v 3.admin.CommandRunnerImpl.access $ 1300(CommandRunnerImpl.java:109)
在com.sun.enterprise.v3.admin.CommandRunnerImpl $ ExecutionContext.execute(CommandRunnerImpl.java:1846)
在com.sun .enterprise.v3.admin.CommandRunnerImpl $ ExecutionContext.execute(CommandRunnerImpl.java:1722)
在com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
at com .sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
在org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:189)
at com .sun.enterprise.v3.services.impl.ContainerMapper $ HttpHandlerCallable.call(ContainerMapper.java:459)
在com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
在org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
在org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
在org.glassfish.gri zzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
在org.glassfish.grizzly.filterchain.ExecutorResolver $ 9.execute(ExecutorResolver.java:119)
在org.glassfish.grizzly .filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
在org.glassfish.grizzly.filterchain.DefaultFilterChain .execute(DefaultFilterChain.java:133)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
在org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java :77)
在org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
在org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112 )
在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access $ 100(WorkerThreadIOStrategy.java:56)
在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
在org.glassfish.rar() java.lang.Thread.run(Thread.java:745)
是否正式禁止注入EJB在类库中使用 @Inject
GlassFish 4.1使用Weld 2.2.2 final作为CDI实现。 p>
如果您的应用程序库中未包含 beans.xml
其中没有一个组件将符合CDI注射的资格,无论是接收注射点还是可注射到其他组件。当你添加你的 beans.xml
时,你就可以使用这个库来注入它的类,现在有资格使用 @Inject
这是一个catch 22.图书馆的目的是它的外部依赖性很小,不知道如何使用它,所以你通常不会有CDI相关代码。
I have a full-fledged Java EE application using GlassFish Server 4.1 / Java EE 7. It is a standard NetBeans project i.e. it does not use Apache Maven.
The application contains a class library named "ProjectLibrary" which is added to both the modules namely the EE module and the web module. The IDE shows the basic tree structure diagrammatically as follows.
There is a requirement to inject an EJB into a JPA entity listener as follows.
@ApplicationScoped
public class EntityListener {
@Inject
private Event<EntityChangeEvent> event;
@EJB
private UserService service;
@PostPersist
@PostUpdate
@PostRemove
public void onEntityChange(Entity entity) {
event.fire(new EntityChangeEvent(Collections.singleton(service.getOwner(entity))));
}
}
This listener is present in the EE project and the class library as well.
UserService
is a stateless local EJB. This works coherently unless the annotation @EJB
is replaced by @Inject
in which case, the following exception is thrown.
Severe: Exception during lifecycle processing
org.glassfish.deployment.common.DeploymentException: CDI deployment failure:WELD-001408: Unsatisfied dependencies for type UserService with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private entity.listeners.EntityListener.service
at entity.listeners.EntityListener.service(EntityListener.java:0)
at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:234)
at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:328)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:496)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:360)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:360)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722)
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
at org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:189)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type UserService with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private entity.listeners.EntityListener.service
at entity.listeners.EntityListener.service(EntityListener.java:0)
at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:370)
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:291)
at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:134)
at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:165)
at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:529)
at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:515)
at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:490)
at org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:419)
at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:90)
at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:225)
... 41 more
Severe: Exception while loading the app
Severe: Undeployment failed for context /Project-war
Finer: initialize identitymaps
Warning: session_manager_no_partition
Info: No timers to be deleted for id: 94539334950977536
Info: No timers to be deleted for id: 94539334950977536
Severe: Exception while loading the app : CDI deployment failure:WELD-001408: Unsatisfied dependencies for type UserService with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private entity.listeners.EntityListener.service
at entity.listeners.EntityListener.service(EntityListener.java:0)
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type UserService with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private entity.listeners.EntityListener.service
at entity.listeners.EntityListener.service(EntityListener.java:0)
at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:370)
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:291)
at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:134)
at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:165)
at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:529)
at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:515)
at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:490)
at org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:419)
at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:90)
at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:225)
at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:328)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:496)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:360)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:360)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722)
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
at org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:189)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
at java.lang.Thread.run(Thread.java:745)
Is it officially disallowed to inject EJBs using @Inject
in class libraries?
GlassFish 4.1 uses Weld 2.2.2 final as the CDI implementation.
If you fail to include a beans.xml
in your application library, none of the components within it will be eligible for CDI injection, either as receiving injection points or as being injectable in to other components. When you added your beans.xml
you made it so that your library could be injected into and its classes were now eligible to be injected using @Inject
It's a catch 22. The purpose of a library is that it has little outside dependency and has no knowledge of how its being used, so you wouldn't typically have CDI related code in it.
这篇关于在类库中使用@Inject注入EJB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!