我對EJB的JBoss上寫的課程或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");
}
}
然後,我通過調用一個JNDI EJB在JSF ManagedBean:
@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);
}
}
那麼我告訴了CitationEJB.getCitation()的JSF。當我把F5,等新的要求,我總是有相同的目標,一切工作只是罰款:當我用CitationEJB.setCitation(「你好TOTO」),然後F5,我有「你好託託」,而不是一個品牌新對象。
當我使用@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我認爲你的問題是措辭不同,但我相信答案適用。 –