JBoss AS 7의 EJB에 대한 코스를 작성 중이며 몇 가지 문제가 있습니다. 호출 된 상태 비 저장 EJB는 절대로 변경되지 않습니다.
@Stateless
public class CitationEJB {
String citation ="Hello Citation";
public String getCitation(){
System.out.println("getting citation from :"+this.toString());
return this.citation;
}
public void setCitation(String citation) {
System.out.println("changing citation to : "+citation);
this.citation = citation;
}
@PostConstruct
public void sayHello(){
System.out.println("Hello, I'm a new EJB");
}
}
그럼 내가 JSF ManagedBean은에서 JNDI를 통해 EJB를 호출 :
@ManagedBean
@SessionScoped
public class CitationBean {
//@EJB trying this time with JNDI
CitationEJB ejb;
public String getCitation() throws NamingException{
ejb = lookupCitationEJB();
return ejb.getCitation();
}
public String getCitation2() throws NamingException{
ejb.setCitation("hello Toto");
CitationEJB ejb = lookupCitationEJB();
return ejb.getCitation();
}
private static CitationEJB lookupCitationEJB() throws NamingException {
Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
Context context = new InitialContext(jndiProperties);
String jndiName = "java:global/CitationsDyn/CitationEJB!com.citations.ejb.CitationEJB";
//jndiName = "java:app/CitationsDyn/CitationEJB"; // Works also
return (CitationEJB) context.lookup(jndiName);
}
}
가 그럼 난 JSF와 CitationEJB.getCitation()를 표시 나는 단순한 지역 무 EJB가 있습니다. F5를 만들 때 새로운 요청을 할 때를 제외하고는 항상 동일한 객체가 있습니다. CitationEJB.setCitation ("Hello toto"), F5를 사용하면 "Hello Toto"및 브랜드가 없습니다. 새로운 Object.
@EJB 주석을 사용하여 EJB를 가져올 때 모든 요청에 대해 새로운 객체가 예상되는 동작을 보입니다.
그래서 내가 배운 것은 EJB가 풀에서 선택된다는 것이지만 언제 파괴되는 것입니까? JNDI 조회는 JSF 페이지와 마찬가지로 Scope에 바인딩되지 않는다고 생각합니다. 그러나 정확히 어떻게 지정되어 있습니까?
http://stackoverflow.com/questions/14200552/stateless-ejb3-bean-invoked-from-request-scoped-jax-rs-web-service-accumulates-s/14201781#14201781 귀하의 질문은 표현 된 것 같습니다. 다르게,하지만 대답은 내가 믿는다. –