我有一個使用請求的web服務(jboss seam),它將其工作進一步委託給不同的接縫組件。其中一個seam組件具有Event.instance()。raiseTransactionSuccessEvent事件生成功能,正在監聽此事件的方法不會被調用。在接縫組件中發射事件
我是否缺少任何配置?
請建議
我有一個使用請求的web服務(jboss seam),它將其工作進一步委託給不同的接縫組件。其中一個seam組件具有Event.instance()。raiseTransactionSuccessEvent事件生成功能,正在監聽此事件的方法不會被調用。在接縫組件中發射事件
我是否缺少任何配置?
請建議
我想通了。 結論是永遠不要混合ejb交易與煤層交易。 我明確禁用了ejb中的ejb trasaction管理。 它的工作!
@Tair
我有其消耗的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 EJB組件是一個接縫組分作爲在components.xml文件如下
@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");
}
}
,我有<transaction:ejb-transaction />
,所以seam可以獲得關於容器事務的更新,並且我有seam管理的persist nce背景
<persistence:managed-persistence-context
auto-create="true" name="entityManager" persistence-unit-jndi- name="java:/pilotEntityManagerFactory" />
感謝您的回覆。我通過添加 配置了components.xml文件中的容器管理事務。根據文檔,事務在調用EJB時透明地啓動(在我的情況下,它將由Web服務調用調用)。我不確定在調用EJB時開始的事務範圍是什麼。在我的情況下,EJB使用Web服務調用,然後將工作委派給其他非EJB接口組件。我會感謝你的幫助。 –
user1000258
任何人有任何想法????? – user1000258
源代碼勝過千言萬語...... :) – Tair