Hello,

we're evaluating SEAM 1.2.1 together with ICEfaces 1.6 Alpha and Facelets on 
GlassFish v2. It was easier than we thought, but we didn't manage to inject (or 
biject!) a stateful session bean into another.

What we want to do is the following:


  | - Have a "controller" bean for every window/tab 
@Scope(ScopeType.CONVERSATION) that holds information about currently selected 
item, navigation history etc.
  | - Have a "model" stateful session bean for storing available items for each 
view in use.
  | 
  | 
  | This way one could write the following expression
  | 
  | 
  |   | <h:outputText value="#{controller.selected.name}"/>
  |   | 
  | 
  | (Bean-Code is at the end of the posting...)
  | 
  | 
  | 
  | What happens is the following:
  | 
  | 
  |   | * The ControllerBean is created in Conversation-Context when used in 
the presentation layer.
  |   | * In NamingManagerImpl.java the following componentId is used as the 
namespace for lookup "MY_EAR_MY" (where "MY_EAR" is the (Eclipse) 
application-project and "MY" is the name of the web-application project)
  |   | * Note: this also works for the other component if used (and created) 
in the presentation layer (i.e. "model.getItems()")
  |   | * @In(jection) takes place, but of course there is no ModelBean in the 
session context
  |   | 
  | 
  | Now the Seam-Interceptor tries to auto-create a ModelBean, but when it 
comes to the lookup NamingManagerImpl retrieves the componentId relative to the 
ControllerBean
  | (using ComponentInvocation ci  = im.getCurrentInvocation();)!
  | 
  | Thus it searches the namespace componentId  
"MY_EAR_MY_EJB.jar_ControllerBean_77129428636467201" which fails because there 
is no ModelBean component registered there.
  | 
  | But: If we change the componentId in the debugger manually to "MY_EAR_MY" 
everything works fine. Question is did we make a configuration error or is this 
a bug? We can't explain why direct creation works but @AutoCreate in another 
component does not. Any hints and help appreciated, thanks in advance!
  | 
  | Regards,
  | Jens
  | 
  | 
  | 
  | The whole application is EARed, consisting of a WAR, an EJB-Jar and an 
EJB-Client.jar, using Eclipse WTP 1.5.3 on Java 6 (and Java EE 5 of course). 
  | 
  | 
  |   | // from web.xml
  |   | 
  |   | <ejb-local-ref>
  |   |         <ejb-ref-name>ejb/ControllerBean/local</ejb-ref-name>
  |   |         <ejb-ref-type>Session</ejb-ref-type>
  |   |         <local>ControllerLocal</local>
  |   |         <ejb-link>MY_EJB.jar#ControllerBean</ejb-link>
  |   | </ejb-local-ref> 
  |   | 
  |   |        <!-- same for ModelBean -->
  |   | 
  | 
  | 
  |   | // ModelBean.java
  |   | 
  |   | @Stateful
  |   | @Name("model")
  |   | @Scope(ScopeType.SESSION)
  |   | @AutoCreate
  |   | @Interceptors(SeamInterceptor.class)
  |   | public class ModelBean implements ModelLocal, Serializable {
  |   |  ...
  |   | }
  |   | 
  |   | 
  | 
  | 
  |   | // ControllerBean.java
  |   | 
  |   | import org.jboss.seam.ScopeType;
  |   | import org.jboss.seam.annotations.Destroy;
  |   | import org.jboss.seam.annotations.In;
  |   | import org.jboss.seam.annotations.Name;
  |   | import org.jboss.seam.annotations.Scope;
  |   | import org.jboss.seam.ejb.SeamInterceptor;
  |   | 
  |   | import java.io.Serializable;
  |   | import java.util.*;
  |   | 
  |   | import javax.ejb.Remove;
  |   | import javax.ejb.Stateful;
  |   | import javax.ejb.Stateless;
  |   | import javax.interceptor.Interceptors;
  |   | 
  |   | @Stateful
  |   | @Name("controller")
  |   | @Scope(ScopeType.CONVERSATION)
  |   | @Interceptors(SeamInterceptor.class)
  |   | public class ControllerBean implements ControllerLocal, Serializable  {
  |   |         private static final long serialVersionUID = 
9095028668253422692L;
  |   |         protected Item selected = null;
  |   |         protected ModelBusiness model;
  |   |         
  |   |         @Remove
  |   |         @Destroy
  |   |         public void remove_destroy() { }
  |   |         
  |   | 
  |   |         public ControllerBean() {
  |   |                 if(model.getItems().size() > 0) {
  |   |                         selected = model.getItems().get(0);
  |   |                 }
  |   |         }
  |   | 
  |   |         // [...]
  |   | 
  |   |         @In   //(create=true) // using @AutoCreate on ModelBean
  |   |         public void setModel(ModelBusiness model) {
  |   |                 this.model = model;
  |   |         }
  |   | 
  | 
  | 

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4038412#4038412

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4038412
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to