2009-12-21 20 views
10

He intentado varias maneras en el bean de sesión, como:Como llegar SessionContext en JBOSS

@Resource 
private SessionContext ctx; 

O

private SessionContext ctx; 

@Resource 
private void setSessionContext(SessionContext ctx) { 
    this.sctx = ctx; 
} 

O

InitialContext ic = new InitialContext(); 
SessionContext ctx = (SessionContext) ic.lookup("java:comp/env/sessionContext"); 

Ninguno de ellos trabajaron, excepciones differnet ocurrió en JBOSS.

Realmente me enojo por eso. Cualquiera me podría decir lo que está mal. ¡Muchas gracias!

Respuesta

13

Las dos primeras soluciones (inyección de campo e inyección de método de fraguado) se ven bien y deberían funcionar.

Tengo una duda sobre el tercero (el enfoque de búsqueda) mientras no se presentó la correspondiente anotación @Resource(name="sessionContext") pero debería funcionar también si se utiliza correctamente.

Una cuarta opción sería la de buscar el nombre estándar java:comp/EJBContext

@Stateless 
public class HelloBean implements com.foo.ejb.HelloRemote { 
    public void hello() { 
    try { 
     InitialContext ic = new InitialContext(); 
     SessionContext sctxLookup = 
      (SessionContext) ic.lookup("java:comp/EJBContext"); 
     System.out.println("look up EJBContext by standard name: " + sctxLookup); 
    } catch (NamingException ex) { 
     throw new IllegalStateException(ex); 
    } 
    } 
} 

Estos cuatro enfoques son todos EJB 3 compatible y definitivamente debe trabajar con cualquier servidor de aplicaciones Java EE 5 como se recordó en 4 Ways to Get EJBContext in EJB 3. Proporcione el seguimiento completo de la excepción que obtiene si no lo hacen.

0

Puede enumerar estas asociaciones utilizando el siguiente código, que le mostrará lo que está disponible en el contexto. (Este código utiliza maravilloso que hacer la iteración (cada uno) sobre la enumeración)

Context initCtx = new InitialContext(); 
Context context = initCtx.lookup("java:comp") as Context 
context.listBindings("").each { 
    println it 
} 

Dependending si este código se ejecuta en un contexto de EJB o contexto web que se vería salida diferente.