在类库中使用@Inject注入EJB [英] Injecting EJBs using @Inject in class library

查看:226
本文介绍了在类库中使用@Inject注入EJB的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用GlassFish Server 4.1 / Java EE 7的完整Java EE应用程序。它是一个标准的NetBeans项目,即它不使用Apache Maven。



该应用程序包含一个名为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆