2012-06-29 1 views
0

요청을 사용하는 웹 서비스 (jboss 이음매)가 있고, 다른 작업 영역 구성 요소로 작업을 위임합니다. 이음매 구성 요소 중 하나에는 Events.instance(). raiseTransactionSuccessEvent와 같은 이벤트 생성 기능이 있습니다.이 이벤트를 수신하는 메서드는 호출되지 않습니다.이음새 구성 요소의 이벤트 발생

구성이 누락 되었습니까?

답변

0

나는 그것을 알아 냈다. ejb 트랜잭션과 seam 트랜잭션을 절대로 섞어서는 안됩니다. ejb에서 ejb trasaction 관리를 명시 적으로 비활성화합니다. 그것은 일했다 !! !!

0
  1. 당신의 Seam 컴포넌트 웹 서비스를 호출 할 때 반드시 트랜잭션이 시작되어 있는지 확인 제안하십시오. 그렇지 않은 경우 수동으로 시작하십시오.
  2. 트랜잭션이 실제로 커밋되는지 확인하십시오. 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"); 
    } 
    } 
    

    을 다음과 같이

+0

답장을 보내 주셔서 감사합니다. 을 추가하여 components.xml 파일에서 컨테이너 관리 트랜잭션을 구성했습니다. 문서에 따르면 EJB가 호출 될 때 트랜잭션이 투명하게 시작됩니다 (제 경우에는 웹 서비스 호출에 의해 호출됩니다). 나는 EJB가 호출 될 때 시작되는 트랜잭션의 범위가 무엇인지 알지 못한다. 제 경우의 EJB는 웹 서비스 호출을 소비 한 다음 다른 EJB가 아닌 Seam 컴포넌트에 작업을 위임합니다. 나는 너의 도움에 감사 할 것이다. – user1000258

+0

아무도 어떤 생각이있다 ????? – user1000258

+0

소스 코드의 가치는 천 가지입니다. :) – Tair

0

는 @Tair 내가

@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 구성 요소가

는 심 구성 요소입니다 , 나는 <transaction:ejb-transaction />을 가지고 있으므로 이음매가 컨테이너 트랜잭션 이벤트에 대한 업데이트를 얻을 수 있고 seam managed persiste를 가질 수 있습니다. nce 컨텍스트

<persistence:managed-persistence-context 
    auto-create="true" name="entityManager" persistence-unit-jndi- name="java:/pilotEntityManagerFactory" />