2009-05-13 3 views
5

애플리케이션 클라이언트에서 SFSB (Stateful Session Bean)에 액세스하는 데 문제가 있습니다. JBoss 5.0.1.GA를 사용하고 있습니다. 응용 프로그램 클라이언트와 EJB는 모두 배포되는 EAR에 패키지되어 있으며 문제없이 작동하는 다른 응용 프로그램 클라이언트가 있습니다. 지금까지는 SLSB 만 사용했지만 SLSB와 SFSB의 차이점은 응용 프로그램 클라이언트에서 액세스 할 수있는 방법에 영향을 미치지 않아야합니다.EJB 3 : 애플리케이션 클라이언트로부터 상태 세션빈 액세스

클래스/인터페이스의 구조는 : "How to use an application client in JBoss 5"에 기재된

@Local public interface A {...} 

@Stateless public class ABean implements A {...} 

@Remote public interface B {...} 

@Stateful public class BBean implements B { 
    @EJB private A anInstanceOfA; 

    @PostConstruct private void init() { 
     this.anInstanceOfA.someMethod(); 
    } 
} 

애플리케이션 클라이언트는 "응용 프로그램 클라이언트 발사기"로 실행된다. "BBean"의 조회는 init()을 실행하는 동안 (로컬) ABean의 someMethod()가 호출 될 때까지 잘 작동합니다. 이 호출 중에 컨테이너는 InvalidStateException ("로컬 호출 : 보안 컨텍스트가 null입니다")을 (루트 원인으로) throw합니다. 상태없는 빈을 상태없는 빈으로 변경하면 모든 것이 정상적으로 작동합니다 (물론 상태는 보존되지 않습니다). 흥미롭게도 JSF 관리 빈에서 웹 애플리케이션의 정확한 SFSB를 사용할 수 있습니다.

내가 잘못 했나요? 응용 프로그램 클라이언트에서 SFSB를 사용하려면 어떻게해야합니까?

지금까지이 특정 문제에 대해 유용한 정보를 찾지 못했습니다. 예외는 [#JBAS-4317] Security Context over the invocation의 비슷한 문맥에서 언급되었지만 완료로 표시되고 JBoss 5.0.0.Beta3에서 수정되었다고 생각하면 동일한 문제가 아닌 것 같습니다.

또한 포장되는 웹 응용 프로그램 : 난 아직도 내 원래의 설정이이 상태 세션 빈에 대한 무 상태 세션 빈에 대해 완벽하게 작동하지만 이유를 알고 싶습니다 비록

답변

1

, 여기 내가 찾은 솔루션입니다 EAR에서 JAAS를 통한 인증을 수행합니다. 뿐만 아니라 내가 웹 응용 프로그램의 보스 - web.xml에이 보안 도메인을 사용하고

<application-policy name="My-SD"> 
    <authentication> 
     <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required"> 
      <module-option name="unauthenticatedIdentity">guest</module-option> 
      <module-option name="dsJndiName">java:/myDS</module-option> 
      <module-option name="principalsQuery">SELECT PASSWORD FROM LOGIN WHERE LOGIN = ? AND STATUS > 0</module-option> 
      <module-option name="rolesQuery">SELECT ROLE, 'Roles' FROM USER_ROLE WHERE LOGIN = ?</module-option> 
     </login-module> 
    </authentication> 
</application-policy> 

이 들어 나는이처럼 보이는 보스 로그인-config.xml 파일의 보안 도메인을 구성한 EJB-project의 jboss.xml. 비록 실제로 웹 애플리케이션에서만 사용하지만 (EJB는 인증없이 액세스 가능합니다.)

SFSB에 액세스 할 때의 문제를 해결하려면 EJB 프로젝트의 jboss.xml에서 보안 도메인을 제거하기 만하면됩니다. 이렇게하면 JBoss가 기본 보안 도메인을 사용하게되는데,이 보안 도메인은 올바른 작업을 수행하는 것으로 보이고 응용 프로그램 클라이언트는 결국 SFSB에 액세스하여 사용할 수 있습니다.

0

이유는 EJB 3.0 Core Specification, 12.4 절에서 찾을 수 있습니다. 여기에 있습니다

라이프 사이클 콜백 인터셉터 메소드는 지정되지 않은 트랜잭션 및 보안 컨텍스트에서 호출됩니다.

HTH,
- 마틴

+1

흥미로운 정보를 제공합니다. 그러나 이것이 어떻게 상태를 설명하는지 확신 할 수 없습니다. 특히 상태없는 bean에서 "작동"하고 문제는 내 보안 도메인을 사용할 때만 발생합니다. 어쨌든, 나는 더 이상 프로젝트와 아무 관계가 없으며 그 이후로 Java EE 개발을 수행하지 않았으므로,이 물건이 실제로 어떻게 작동 하는지를 알기위한 동기가별로 없습니다. 어쨌든 고마워! –

관련 문제