在接缝组件中射击事件

时间:2012-06-29 18:40:40

标签: events jboss seam

我有一个使用请求的Web服务(jboss seam),它进一步将其工作委托给不同的seam组件。其中一个seam组件具有事件生成功能,如Events.instance()。raiseTransactionSuccessEvent,不会调用正在侦听此事件的方法。

我缺少任何配置吗?

请建议

3 个答案:

答案 0 :(得分:0)

  1. 从您的Web服务调用Seam组件时,确保已启动事务。如果没有,请手动启动。
  2. 确保事务实际提交。

答案 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管理。 它工作!!。