在ExceptionMapper中注入单例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在ExceptionMapper中注入单例相关的知识,希望对你有一定的参考价值。

我有一个ExceptionMapper定义如下

@Provider
public class MyExceptionMapper implements ExceptionMapper<Throwable> {
   @Inject
   private Manager myManager;

   @Override
   public Response toResponse(Throwable exception) {
      // My implementation
   }
}

在glassfish 4上部署此代码的结果如下:

org.glassfish.hk2.api.UnsatisfiedDependencyException: 
There was no object available for injection at
Injectee(requiredType=Manager,parent=MyExceptionMapper,qualifiers {}),position=-1,optional=false,self=false,unqualified=null,955636053)

当我使用@Context而不是@Inject时,我没有看到异常但myManager为null我尝试将MyManager设为@ManagedBean,@ Singleton或EJB(无状态,单身)并且不工作

答案

在JEE6(使用glassfish 3)你必须添加

@javax.annotation.ManagedBean

到提供者实现。可能这也适用于Glassfish 4

据我所知,这个问题来自以下几点。默认情况下,CDI不适用于管理restful服务和提供程序的依赖项。但是在添加@ManagedBean时,您可以启用CDI来创建实例。

这是一个example,我用CDE引入CDI到一个宁静的服务。

另一答案

您可以在此处关注此问题的更新https://java.net/jira/browse/JERSEY-2393

另一答案

您可以使用OmniFaces BeansExceptionMapper中获取CDI托管bean实例:

Beans.getInstance(Bean.class)

我正在使用含有@javax.ejb.Stateless@javax.persistence.PersistenceContext豆。

以上是关于在ExceptionMapper中注入单例的主要内容,如果未能解决你的问题,请参考以下文章

性能比较好的单例写法

如何在可组合物中使用刀柄注入单例

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

片段作为 Android 中的单例

如何将 @Context 注释字段注入 RestEasy @Provider?

如何在整个应用程序中创建和注入用户特定的单例类?