我有一个使用请求的Web服务(jboss seam),它进一步将其工作委托给不同的seam组件。其中一个seam组件具有事件生成功能,如Events.instance()。raiseTransactionSuccessEvent,不会调用正在侦听此事件的方法。
我缺少任何配置吗?
请建议
答案 0 :(得分:0)
答案 1 :(得分:0)
@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是一个接缝组件,如下所示
@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 managed persistence context
<persistence:managed-persistence-context
auto-create="true" name="entityManager" persistence-unit-jndi- name="java:/pilotEntityManagerFactory" />
答案 2 :(得分:0)
我明白了。 结论是永远不要将ejb交易与煤层交易混在一起。 我明确地禁用了ejb中的ejb trasaction管理。 它工作!!。