【发布时间】:2012-07-20 05:33:31
【问题描述】:
我有一个使用请求的 Web 服务(jboss seam),它进一步将其工作委托给不同的接缝组件。其中一个接缝组件具有事件生成功能,即 Events.instance().raiseTransactionSuccessEvent,不会调用正在侦听此事件的方法。
我是否缺少任何配置?
请推荐
【问题讨论】:
我有一个使用请求的 Web 服务(jboss seam),它进一步将其工作委托给不同的接缝组件。其中一个接缝组件具有事件生成功能,即 Events.instance().raiseTransactionSuccessEvent,不会调用正在侦听此事件的方法。
我是否缺少任何配置?
请推荐
【问题讨论】:
【讨论】:
@Tair
我有一个 ejb 组件,它使用如下 Web 服务请求
@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是一个seam组件如下
@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 />,因此 seam 可以获取有关容器事务事件的更新,并且我有 seam 管理的持久性上下文
<persistence:managed-persistence-context
auto-create="true" name="entityManager" persistence-unit-jndi- name="java:/pilotEntityManagerFactory" />
【讨论】:
我想通了。 结论是永远不要将 ejb 事务与 seam 事务混合。 我明确禁用了 ejb 中的 ejb 事务管理。 成功了!!。
【讨论】: