Currently in our EJB3 StatelessContainer http://anonsvn.jboss.org/repos/jbossas/projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessContainer.java we have WSCallbackImpl which is a callback for BeanContext creation and removal:
static class WSCallbackImpl implements BeanContextLifecycleCallback
{
private ExtensibleWebServiceContext jaxwsContext;
private javax.xml.rpc.handler.MessageContext jaxrpcMessageContext;
public WSCallbackImpl(javax.xml.rpc.handler.MessageContext jaxrpc, ExtensibleWebServiceContext jaxws)
{
jaxrpcMessageContext = jaxrpc;
jaxwsContext = jaxws;
}
public void attached(BeanContext beanCtx)
{
// JAX-RPC MessageContext
StatelessBeanContext sbc = (StatelessBeanContext)beanCtx;
sbc.setMessageContextJAXRPC(jaxrpcMessageContext);
// JAX-WS MessageContext
BeanProperty beanProp = sbc.getWebServiceContextProperty();
if (beanProp != null)
{
EJBContext ejbCtx = beanCtx.getEJBContext();
jaxwsContext.addAttachment(EJBContext.class, ejbCtx);
beanProp.set(beanCtx.getInstance(), jaxwsContext);
}
}
public void released(BeanContext beanCtx)
{
StatelessBeanContext sbc = (StatelessBeanContext)beanCtx;
sbc.setMessageContextJAXRPC(null);
BeanProperty beanProp = sbc.getWebServiceContextProperty();
if (beanProp != null)
beanProp.set(beanCtx.getInstance(), null);
}
}JBossWS still uses that to retrieve the caller principal and for the isCallerInRole check.