Access to @RequestScoped from EJB
marcial.atienzar Dec 9, 2015 10:07 AMHello,
We're using wildfly 9.0.2.Final
I've a frest service like this:
@Stateless
@Path(PlaniOperations.WS_PLANILLA_ANUAL)
@Produces(MediaType.TEXT_HTML)
@DeclareRoles({Permisos.ROL_PUBLICO})
@RolesAllowed(value = {Permisos.ROL_PUBLICO})
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class PlanillaAnualWS {
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path(PlaniOperations.OP_SHOW_RESUMEN_BUTTON)
public Boolean showResumenButton() {
return bean.showResumenButton();
}
}
And tthis ContainerRequestFilter:
@Provider
public class KyrianSessionFilter implements ContainerRequestFilter {
@Inject
private KyrianRequestContext requestCtx;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
KyrianUser usrSession = (KyrianUser) servletRequest.getSession().
getAttribute(CommonConstant.INSTANCE_SESSION_OPERTION_HEADER);
if (log.isInfoEnabled()) {
log.info("ID DE SESION {} / {}", instanceSessionId, servletRequest.getRequestURI());
}
if (usrSession != null) {
// Añadimos a la request la información del Perfil asociado al instanceSessionId
requestCtx.setUsrSession(usrSession);
requestCtx.setInstanceId(instanceSessionId);
}
}
}}
This filter, takes the KyrianUser from HttpSession, and put it on KyrianRequestContext. I need this, to access user information on EJB.
And finally, on EJB I've this code:
@Stateless
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@DeclareRoles({Permisos.ROL_PUBLICO})
@RolesAllowed(value = {Permisos.ROL_PUBLICO})
public class PlanillaAnualBean {
@Inject
private KyrianRequestContext session;
@EJB
private PlaniBean beanPlani;
/**
* Se muestra el botón de resumen si el usuario emulado tiene colaboradores
*
* @return
*/
public Boolean showResumenButton() {
return beanPlani.hasColaboradores(session.getPerfilActual().getLogin());
}
}
This code works well on 90% of times, sometimes I've a NPE that can't reproduce it on session.getPerfilActual().getLogin().
I'm doing something wrong, or is it a better approach to do it?