问题标签 [cdi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2525 浏览

web-services - 注射记录仪,焊接

我正在尝试通过一些注入替换标准记录器初始化

1-st。

我试图 在无状态 bean/webservices 中使用焊接焊接记录

但它对我不起作用..我得到 java.lang.reflect.InvocationTargetException

javax.servlet.ServletException: org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:326) 的 java.lang.reflect.InvocationTargetException org.glassfish.webservices.monitoring.WebServiceTesterServlet.invoke(WebServiceTesterServlet.java:102) ) 在 com.sun.grizzly.http.servlet.FilterChainImpl.doFilter( FilterChainImpl.java:195) 在 com.sun.grizzly.http.servlet.FilterChainImpl.invokeFilterChain(FilterChainImpl.java:139) 在 com.sun.grizzly.http.servlet.ServletAdapter.doService(ServletAdapter.java:376) 在 com .sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:329) 位于 com.sun.grizzly.tcp.http11.GrizzlyAdapter。com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100) 上的服务(GrizzlyAdapter.java:166) com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java: 245) 在 com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) 在 com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) 在 com.sun.grizzly.http.ProcessorTask .process(ProcessorTask.java:954) 在 com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) 在 com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) 在 com.sun。 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) 上的 com.sun.grizzly.http.HttpProtocolChain 上的 grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)。在 com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) 在 com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) 在 com.sun.grizzly.ContextTask.doCall(ProtocolChainContextTask.java:53) 执行(HttpProtocolChain.java:76) .run(ContextTask.java:69) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309 ) 在 java.lang.Thread.run(Thread.java:619) 引起:java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java :39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:297) ... 24 更多原因:javax.xml.ws.soap.SOAPFaultException:com.sun.xml 中的 javax.ejb.EJBException .ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:189) 在 com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:130) 在 com.sun.xml.ws.client.sei.SyncMethodHandler .invoke(SyncMethodHandler.java:119) 在 com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89) 在 com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub .java:140) at $Proxy484.sayHello(Unknown Source) ... 29 更多原因:com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5070) at com.sun 的 javax.ejb.EJBException .ejb.containers.BaseContainer。com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4756) 的 completeNewTx(BaseContainer.java:4968) com.sun.ejb.containers.WebServiceInvocationHandler.invoke(WebServiceInvocationHandler.java:200) 的 $Proxy464。 sayHello(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java。 lang.reflect.Method.invoke(Method.java:597) at org.glassfish.webservices.InvokerImpl.invoke(InvokerImpl.java:78) at org.glassfish.webservices.EjbInvokerImpl.invoke(EjbInvokerImpl.java:78) at com .sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146) 在 com.sun.xml.ws.server.sei.EndpointMethodHandler。在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber. java:629) 在 com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588) 在 com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)在 com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470) 在 com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112) 在 org .glassfish.webservices.MonitoringPipe.process(MonitoringPipe.java:138) 在 com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115) 在 com.sun.xml.ws.api .pipe.Fiber.__doRun(Fiber.java:629) 在 com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588) 在 com.sun.xml.ws.api.pipe.Fiber .doRun(Fiber.java:573) 在 com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470) 在 com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112) 在 com.sun.xml.ws.tx.service.TxServerPipe.process(TxServerPipe.java: 306) 在 com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115) 在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)在 com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588) 在 com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573) 在 com.sun .xml.ws.api.pipe.Fiber.runSync(Fiber.java:470) 在 com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112) 在 com.sun.enterprise .security.webservices.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:195) 在 com.sun.enterprise.security.webservices.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:127) 在 com.sun.xml.ws.api。pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115) 在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629) 在 com.sun.xml.ws.api.pipe。 Fiber._doRun(Fiber.java:588) 在 com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573) 在 com.sun.xml.ws.api.pipe.Fiber.runSync( Fiber.java:470) 在 com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:295) 在 com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java :519) 在 com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:288) 在 com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:143 ) 在 org.glassfish.webservices.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87) 的 org.glassfish.webservices.Ejb3MessageDispatcher.handlePost(Ejb3MessageDispatcher.java:116)。webservices.EjbWebServiceServlet.dispatchToEjbEndpoint(EjbWebServiceServlet.java:196) at org.glassfish.webservices.EjbWebServiceServlet.service(EjbWebServiceServlet.java:127) ... 22 更多原因:java.lang.NullPointerException at ua.eset.inferno.heresy .ws.security.Hello.sayHello(Hello.java:33) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1056) 在 org.glassfish。 com.sun.ejb.containers.BaseContainer 中的 ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1128)。com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797) 上 com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797) 上的 invokeBeanMethod(BaseContainer.java:5243) .ejb.EjbInvocation.proceed(EjbInvocation.java:567) 在 com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:157) 在 com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy .java:139) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java. lang.reflect.Method.invoke(Method.java:597) 在 com.sun.ejb.containers.interceptors。com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797) 上的 AroundInvokeInterceptor.intercept(InterceptorManager.java:858) com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java: 367) 在 com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5215) 在 com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5203) 在 com.sun.ejb.containers.WebServiceInvocationHandler .invoke(WebServiceInvocationHandler.java:188) ... 66 更多__intercept(BaseContainer.java:5215) at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5203) at com.sun.ejb.containers.WebServiceInvocationHandler.invoke(WebServiceInvocationHandler.java:188) ... 66更多的__intercept(BaseContainer.java:5215) at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5203) at com.sun.ejb.containers.WebServiceInvocationHandler.invoke(WebServiceInvocationHandler.java:188) ... 66更多的

错过了什么?

第二次

比我尝试引用this的本教程-自定义注入

但这也无济于事。

Maven 依赖项 -

Q1:ejb / web services中weld Logger注入的规则是什么?

Q2:会不会是 wsdl/EJB/WebService 问题?

0 投票
1 回答
1884 浏览

jakarta-ee - Glassfish webapp 中的 EJB 注入

我有一个应用程序正在尝试使用 @EJB 注释在我的 ejb.jar 文件中注入对 EJB 的远程引用。我得到不一致的结果。在一种情况下,我在 web.xml 中有一个侦听器,它被调用并且显然正确注入了 EJB,因为我可以看到它连接到 EJB 并在其上调用方法。在另一个类(struts2 操作)中,当它尝试访问 EJB 引用时,我得到了 NPE。据我所知,它们是相同的调用,位于同一个 .war 文件中的 Java 类中。

作为一种变通方法,我在构造函数中添加了代码以通过全局 JNDI 名称查找 EJB,它工作正常。我只是无法弄清楚为什么一个@EJB 有效,而不是另一个。

0 投票
1 回答
1536 浏览

java - 如何使用 CDI 从外部库中注入 bean?

如何使用 JSR-299 CDI 从外部库注入(未注释)bean?

例子:

接口 X 及其实现来自第三方库。我如何决定使用哪个实现?

如果我有几个使用 X 接口但实现不同的类怎么办?

0 投票
2 回答
1311 浏览

jsf - CDI 超时导致 NPE

有没有办法(在 JSF 2 中)捕获会话超时并将用户重定向到新页面?当对话超时时,我得到了令人讨厌的 NullPointerExceptions。

我可以在所有 NPE 上重定向用户,但这似乎是一个太大的网络。

0 投票
2 回答
2764 浏览

spring - Spring和javax.enterprise.inject有什么关系?

我在这里阅读了一篇关于 Java EE 应用服务器的 Wikipedia 文章:

http://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition#Java_EE_5_certified

它说 Java App Services 实现的 2 个 API 是:

这些都与应用程序上下文和依赖注入 JSR-299 有关。我以前从未听说过这些 API。Spring 是否实现了这些 API?如果他们这样做,对任何人来说都重要吗?

0 投票
2 回答
2052 浏览

java - CDI/JSF 和 JAX-RS?

我想在 CDI/JSF2 应用程序中使用 RESTful 服务。我对 JAX-RS 不是很熟悉,但是我读到它的生命周期不能很好地与 CDI/JSF2 配合使用。是否可以将 JAX-RS 与 CDI/JSF2 合并到 JEE6 堆栈中?如果没有,还有其他选择吗?

谢谢

0 投票
2 回答
13336 浏览

jakarta-ee - 如何使用 Weld 注入不可序列化的类(如 java.util.ResourceBundle)

我想创建一个 Producer,它可以将 java.util.ResourceBundle 注入任何类,以便轻松获取本地化字符串。我的 ResourceBundle-Producer 如下所示:

Locale 和 FacesContext 的注入有效(从 Seam 3 Alpha Source 获取相应的生产者)。但不幸的是,ResourceBundle 不是可序列化的,因此不能以这种方式生成。尝试访问调用使用我的 ResourceBundle 的 bean 的 JSF 页面时,我从 Weld 收到以下错误:

Caused by: org.jboss.weld.IllegalProductException: WELD-000054 Producers cannot produce non-serializable instances for injection into non-transient fields of passivating beans\\n\\nProducer\: org.jboss.weld.bean-/D:/Program Files (x86)/GlassFish-Tools-Bundle-For-Eclipse-1.2/glassfishv3/glassfish/domains/teachernews/applications/teachernews/-ProducerMethod-services.producers.ResourceBundleProducer.getResourceBundle()\\nInjection Point\: field web.PersonHome.bundle

有什么方法可以让我的 ResourceBundleResolver 工作吗?还是有任何其他机制可以获得类似的功能?提前致谢!

编辑:

好的,我会花掉一些我辛苦赚来的积分;)也会接受一个很好的解决这个问题的方法!

我得到了另一个无法创建 Producer 的示例:FlashProducer。FacesContext-Flash 也无法生成,因为 Flash 不可序列化。

0 投票
1 回答
790 浏览

cdi - 我应该在哪里申报我的 CDI 资源?

JSR-299 (CDI) 引入了资源的(不幸命名)概念:http: //docs.jboss.org/weld/reference/1.0.0/en-US/html/resources.html#d0e4373

您可以将此命名法中的资源视为 Java EE 6 品牌的依赖注入(@EJB、@Resource、@PersistenceContext 等)和 CDI 的依赖注入品牌之间的桥梁。

一般的要点似乎是在某个地方(这将是我的问题的根源)您声明什么相当于一个桥接类:它包含使用 Java EE 的 @EJB 或 @PersistenceContext 或 @Resource 注释以及 CDI 的 @Produces 注释的字段注释。最终结果是 Java EE 6 注入了持久性上下文,例如,在需要它的地方,CDI 将注入的 PersistenceContext 识别为未来注入的源(由@Inject 处理)。

我的问题是:社区的共识是什么——或者是否有一个——关于:

  • 这个桥接类应该被命名为什么
  • 这个桥牌班应该住在哪里
  • 最好将所有这些东西本地化到一个类中还是制作几个类

...?

留给我自己的设备,我正在考虑声明一个名为的类CDIResources并将其用作将 Java EE 的 DI 与 CDI 的 DI 链接的唯一真实位置。许多示例都做了类似的事情,但我不清楚它们是否“只是”示例,或者这是否是一个好方法。

谢谢。

0 投票
1 回答
301 浏览

inversion-of-control - 如何使用 CDI (WELD) 级联依赖关系解析

我想要一个中央焊接容器来容纳我所有的服务等等。然而,该容器将被包含本地设置的第二个容器包装。目标是如果在外部容器中找不到依赖项,那么我想搜索内部容器。

我怎样才能做到这一点?我更愿意以站立的方式做事,而不是恢复使用非标准 WELD 扩展。

0 投票
1 回答
983 浏览

guice - 在 CDI(WELD) 中是否有一个等价物来构建定义(就像在 Guice 模块中所做的那样)然后创建一个注入器?

我喜欢 Guice 让手动创建自己的模块变得相当简单的方式,每个模块都有自己的代码绑定。另一方面,CDI 似乎更多地依赖魔术而不是对 sest 绑定的编程访问。我错了吗,或者如何使用 WELD 达到相同的效果。

任何代码示例将不胜感激...

澄清

我希望使用 Guice 在http://code.google.com/p/google-guice/上给出的构建器模式样式以编程方式构建一个模块(Guice 术语对不起我不确定 CDI 术语)。

我正在构建一个动态系统,我需要能够绑定类型(如接口)、常量等,而不仅仅是让 Weld 动态扫描类路径等并查找和注册类型。我相信 CDI 是静态的 javax.inject 包不包含任何允许以编程方式将类型绑定到实现的接口。

澄清第 2 部分

原始问题的基本前提是简单的观察,即注释已被烘焙,并且其中定义的用于帮助注入器的规则无法更改。我最初希望公共访问与 CDI 类路径扫描器用于为其内部使用构建定义的相同接口。基本上我说的是,我想要一个允许我阅读注释并为容器创建定义的层。默认提供者可能是现在发生的事情,但是如果您想要其他策略,那么就有可能做到这一点。

当前方法的一个问题是不能重用具有不同注释的组件(类)来选择不同的协作者。在你跳之前,让我限定这个陈述,是的,它可以通过提供者等来完成,但这会导致更多的工件。应该有更简单的方法。

示例 1

对不起,如果这个例子很糟糕,我的用例会涉及更多,细节会妨碍阅读时间。

想象一下,有一个 url 重写组件,为了参数,它有一些参数,比如

  • 用那个模式替换这个模式。
  • 也许是一个 html 清洁器

如果您希望使用两个不同的替换规则注入相同的组件,但有 html 清洁器注入器,那么您就卡住了。当然有办法解决这个问题,但它们需要人工制品,这当然是更多的代码。

不幸的是,所有绑定规则都在类上而不是实例上,因此每次你请求一个类时,你都会得到一个功能上相当的实例。

焊接

这个问题是很久以前写的,我已经放弃了 Weld。我相信它决定其魔法的方式是错误的。我不喜欢他们在没有为我提供控制何时或如何重复此操作的方法的情况下向我指示这是如何发生的事实。我不喜欢这种不灵活。