我有一个通过 smack (基于事件的 java 库)处理 IQ 节的应用程序。我们现在从 vanilla Tomcat 切换到 glassfish 3.1,我想切换到 ejb 3.1。
@Stateless
public class DispatchIQService {
private static Logger log = Logger.getLogger(DispatchIQService.class);
@PersistenceContext(unitName="hq")
private EntityManager em;
....
public void process(XMPPConnection connection, IQ rawRequest) {
log.debug("Raw Provider IQ: " + rawRequest.toXML());
RawResponse answer = null;
try{
StateWrapper state = new StateWrapper(em, connection, rawRequest);
// parsing raw xml from request
rawRequest.parse();
// processing action
answer = rawRequest.dispatchAction(state);
由于基于事件的库,我为每个请求获取了正确的对象。 StateWrapper 是一个旧的构造,用于通过消息处理传递 em、请求和连接。我想通过 ejbs 和依赖注入尽快删除它。
使用 rawRequest.dispatchAction(state),我将控制权传递给请求对象以查找外观服务并从业务逻辑开始。
@Override
public RawResponse dispatchAction(StateWrapper state) {
ModelFacade modelFacade = Core.lookup(ModelFacade.class);
return modelFacade.listModels(state, childElement.getIds());
}
Core.lookup 只是进行 jndi 查找来获取所需的 Bean。在这个豆子中我可以注入它们。
@Stateless
public class ModelFacade {
@PersistenceContext(unitName="hq")
private EntityManager em;
...
public RsModelListIQ listModels(StateWrapper state, List<Long> list) { ...
我的问题是:这个 em 是否在与 DispatchIQService 中的 em 相同的事务下运行?
我怎样才能检查它?他们的地址?
此致
米