我有一个使用请求的 Web 服务(jboss seam),它进一步将其工作委托给不同的接缝组件。接缝组件之一具有事件生成能力,如 Events.instance().raiseTransactionSuccessEvent,监听此事件的方法不会被调用。
我是否缺少任何配置?
请建议
@Tair
我有一个使用 Web 服务请求的 ejb 组件,如下所示
@Name("plugin")
@Stateless
@WebService(name = "PluginService", serviceName = "PluginService")
public class PluginService implements IPlugin {
@WebMethod
public boolean createUser(String username, String password) {
System.out.println("in login ");
WebAuthenticator authenticator = (WebAuthenticator) Component
.getInstance("webauthenticator");
usreCreated = authenticator.create(username, password);
System.out.println("valid user "+validUser);
return userCreated;
}
}
WebAuthenticator 是一个接缝组件,如下
@Name("webauthenticator")
@Scope(ScopeType.CONVERSATION)
public class WebAuthenticator {
@In
EntityManager entityManager;
@Observer("test")
public void test()
{
System.out.println("A transaction success event was fired");
}
private static Log log = (Log) Logging.getLog(WebAuthenticator.class);
private static byte[] accountPassword = null;
private static Account currentAccount = null;
public boolean createUser(String username, String password) {
System.out.println("In web authenticator");
User user = new User();
user.username = username;
user.password = password;
entityManager.persist(user);
entityManager.flush();
Events.instance().raisTransactionSuccessEvent("test");
}
}
在 components.xml 文件中,我有<transaction:ejb-transaction />
,以便接缝可以获取有关容器事务事件的更新,并且我有接缝管理的持久性上下文
<persistence:managed-persistence-context
auto-create="true" name="entityManager" persistence-unit-jndi- name="java:/pilotEntityManagerFactory" />
我想到了。结论是永远不要将 ejb 事务与 seam 事务混合。我明确禁用了 ejb 中的 ejb 事务管理。有效!!。