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.