2009-12-24 5 views
1

질문 1 : 내가 EJB를 작성한 것을 배우기 위해 따라하기 때문에 모든 조회가 새로운 상태 저장 세션 빈을 만듭니다. 그래서 내가 한 것은 sysout 문으로 @PostConstruct 주석을 가진 init() 메소드로 정의됩니다. 따라서 모든 Stateful Bean에 대해 실행될 필요가있다. 그러나 같은 일은 일어나지 않습니다. 클라이언트 측에서 다음 코드를 콩Stateful beans에서 나를 도와주세요

@Stateful 
public class PersonnelModelBean implements PersonnelModelRemote{ 

    @PostConstruct 
    void init(){ 
     System.out.println("STATEFUL BEAN transforming to Mathod Ready state"); 
    } 

} 

에서

을 고려

try { 
      InitialContext context = InitialContextBuilder.getJBOSSInitialContext(); 
      PersonnelModelRemote personnelModel = (PersonnelModelRemote)context.lookup("PersonnelModel/remote"); 
      personnelModel.setPersonKey(new Integer(1)); 
      personnelModel.setPersonName("Naresh"); 
      PersonData person = personnelModel.getPerson(); 
      System.out.println(person); 
      personnelModel = (PersonnelModelRemote)context.lookup("PersonnelModel/remote"); 
      personnelModel.setPersonKey(new Integer(2)); 
      personnelModel.setPersonName("Pokuri"); 
      person = personnelModel.getPerson(); 
      System.out.println(person); 
     } catch (NamingException e) { 
      e.printStackTrace(); 
     } 

은 질문 2 : 같은 방식으로 저자는 말했다 그 @Remove 주석 메소드를 호출에 대한 것 컨테이너에서 클라이언트 관련 빈을 제거하십시오. 따라서 컨테이너는 bean 삭제시 destroy() (@PreDestroy로 주석 됨) 메소드를 호출해야합니다. 그러나 그것은 일어나지 않습니다. 내가 JBOSS의 서버/기본/conf의 디렉토리의 standardjboss.xml 60 초로 설정 한 다음 코드

@Stateful 
public class PersonnelModelBean implements PersonnelModelRemote{ 

@Remove 
    public PersonData getPerson() { 
     PersonData personData = new PersonData(); 
     personData.setKey(key); 
     personData.setName(name); 
     return personData; 
    } 

    @PreDestroy 
    void destroy(){ 
     System.out.println("STATEFUL BEAN transforming to Does not exist state"); 
    } 
} 

질문 3을 고려한다. 15 분 동안 기다렸다가 클라이언트 코드를 실행하면 @PostConstruct라는 주석이 달린 메서드가 호출되어야합니다. 그러나 그것은 또한 일어나지 않았습니다.

답변

1

Q1 : 이것은 다른 호출이 SFSB에 도달하기 전에 PostConstruct 주석이있는 메소드를 호출해야합니다. 당신의 클라이언트는 작동합니까? 아마도 로그 메시지가 server.log로 이동합니다.

Q2 : 컨테이너가 컨테이너 풀에서 빈을 제거하기 전에 제거 주석이있는 메소드가 호출됩니다. 비즈니스 방법과 함께 사용하기위한 것이 아닙니다. 확인 http://www.java2s.com/Code/Java/EJB3/RemoveAnnotation.htm

Q3 : 클린 업이의 설정에 따라 지연 될 수 있습니다 $ JBOSS_HOME/서버/defalut/conf의/standardjboss.xml 이 섹션의 캐시 정책 설정을 확인합니다

<container-configuration> 
     <container-name>Standard Stateful SessionBean</container-name> 
     <call-logging>false</call-logging> 
... 

어쩌면 컨테이너가 강제로 불필요한 빈을 테스트하도록 할 수 있습니다.

<container-pool-conf> 
     <MaximumSize>1</MaximumSize> 
</container-pool-conf> 

두 번째 클라이언트를 사용하십시오.

+0

Q1 : 모든 로그가 Eclipse 콘솔에 표시됩니다. Q2 :하지만 Stateful beans 컨테이너의 경우 풀링 개념을 사용하지 않습니다. – Pokuri

+0

Q1 : 다른 메시지를 확인하기 위해 호출되는 메서드에서 다른 System.out을 추가하는 경우 일식 콘솔에 표시되는 것일 수 있습니다. Q2 : jboss-4.2.3에서 standardjboss.xml의 stateful 세션 빈에 대한 풀 크기 구성을 찾았으므로 위의 항목이 가짜 항목이라고 생각하지 않습니다. – stacker

관련 문제