我对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我认为你的问题是措辞不同,但我相信答案适用。 –