我有一个有状态的会话作用域(CDI)EJB,它保存有关用户会话的信息。
@Stateful
@SessionScoped
public class GestorSesion implements IGestorSesionLocal, Serializable {
private final static long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(GestorSesion.class.getName());
@PostConstruct
private void init() {
log.info("Configurando información de usuario");
log.info("****************************************************************************");
}
@Override
public void cerrarSesion() {
}
@Override
public ISessionInfo getSesionInfo() {
return null;
}
}
现在,我想从一个HttpSessionListener
public class GestorSesionWeb implements HttpSessionListener {
private static final Logger log = Logger.getLogger(GestorSesionWeb.class.getName());
@Inject
private Instance<IGestorSesionLocal> gestorSesion;
@Override
public void sessionCreated(HttpSessionEvent se) {
if (log.isLoggable(Level.FINE)) {
log.fine("Iniciada sesión web");
}
gestorSesion.get().getSesionInfo();
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
if (log.isLoggable(Level.FINE)) {
log.fine("Limpiando sesión al salir");
}
try {
this.gestorSesion.get().cerrarSesion();
if (log.isLoggable(Level.FINE)) {
log.fine("Sesión limpiada sin problemas");
}
} catch (Exception e) {
log.log(Level.WARNING, "Excepción limpiando sesión", e);
}
}
}
我从webapp直接访问EJB(使用@EJB
注入)到我为JSF使用的bean中(它们也是CDI管理的bean)。
我面临的问题是,HttpSessionListener
似乎与JSF bean处于不同的“会话范围”。创建了两个GestorSession
实例;一个从JSF实例化,另一个从HttpSessionListener实例化。
我尝试通过注入实例注入bean
这个bug报告建议它应该能够正常工作(对于我的版本,bug已经解决了),但是我仍然无法回避它。我环顾四周,但我发现的是Q
使用WilFly 8.1。0和JDK 7
有什么想法吗?
我认为你的pb来自这里:
我从webapp直接访问EJB(使用@EJB
注入)到JSF bean中。
当将CDI与EJB一起使用时(例如,通过在其上放置一个@Sessionscoped
),您得到了一个CDIBean,它也具有EJB特性,但不是相反。换句话说,CDI知道EJB的本质,但EJB不知道CDI。
因此,如果您想将EJB作为CDIBean注入代码中,请使用@inject
而不是@EJB
。从JavaEE6中,公认的良好实践是始终使用@Inject
,EJB远程除外。
还要确保只使用CDI托管bean,而不是CDI和JSF托管bean的混合。
我在的实现类中注入的任何CDI bean都被证明为null。惰性模型实现类本身是一个CDIbean,范围。它看起来像这样: 在注入lazymodel实现bean类时,我确实在eclipse中收到了来自Java的警告。警告类似于lazymodel类bean不能被容器代理,因为它不包含非私有的无参数构造函数,并且bean不是普通的作用域bean(类似于此)。 还有一个问题,在LazyDataModel
我在我的pc上使用CDI作为jsf的支持bean编写了一个应用程序,该应用程序工作得非常好。 现在我在一台新的pc上设置了所有的东西,安装了glassfish 4.1,通过将安装的jre作为jdk7从glassfish文件夹中设置eclipse kepler。 当我在我的pc上为应用程序创建一个war,并将其部署到另一台pc上的glassfish服务器上时,一切都很好。 它根本无法识别。像CDI是
问题内容: 由于JPA 2.0不支持注入EntityListener(将使用JPA 2.1),因此决定使用JNDI查找来获取,并通过它来获取登录用户。我定义了一个与此类似的东西: 在会话范围内以以下方式管理用户: 我想知道这种方法有什么缺点或要注意的地方。性能吞吐量?当有多个登录用户在其自己的范围内同时更新实体时,会发生什么情况? Hibernate JPA 2.0 缝焊CDI Glassfish
问题内容: 当前,我正在使用PersistenceContext注入EntityManager。EM被完美注入。 现在,我尝试装饰Bean,然后突然没有注入em。我得到一个NullPointerException。 我知道EJB和CDI是2个完全不同的管理器,所以一个都不知道另一个。我期望@PersistenceContext是EJB注入点,而@Inject是CDI。我应该怎么做才能解决这个问题并
我有一个JAR文件,其中包含一个请求范围Bean。(一个注释为的类)。 我有另一个Web服务项目(作为WAR文件构建)。上述JAR文件位于WAR文件的文件夹中。 我试图的类到Web服务项目中的一个类中。 我正在得到一个 这两个项目都有JAR文件,WAR文件包含一个空的。我已经研究这个问题好几天了。请帮忙。 谢谢
我正在使用tomcat 9.0。4和Java1.8。在同一个项目中,jersey提供了一个Web服务。我可以从webservice类中使用@Inject,没有任何问题。我正试图通过下面的websocketendpoint显示使注入工作。 这是我的CDI实现: 我得到的只是一个java。lang.NullPointerException。 我找到了这个功能请求。所以我认为注射仍然没有在tomcat中