[jboss-user] [JBoss Seam] - @Out-jection fails to work in certain conditions - Beware!

gothmog do-not-reply at jboss.com
Fri Oct 19 07:53:18 EDT 2007


Hi,
 
This is an interesting example and I would be grateful if anyone could shed some light on this extremely strange behaviour. 

It seems that in the following example, if an item is an @Entity Pojo on an action class and the entity manager is @In-jected to the same action class (you don't have to use it) then @Out-jection will fail.

The following simple example will illustrate.

This simple page will display the value of an item if the item is not null

  | <body>
  |   <f:view>
  |     <h:form>
  |       <div><h:commandLink value="New Item" action="#{testPage.newItem}" /></div>
  |         <s:div rendered="#{testPage.item != null}">
  |           #{testPage.item.name}
  |         </s:div>
  |       <h:commandLink value="Clear Item" action="#{testPage.clearItem}" />
  |     </h:form>
  |   </f:view>
  | </body>
  | 

The testPage action class is as follows


  | @Name("testPage")
  | @Scope(ScopeType.CONVERSATION)
  | public class TestPageAction {
  | 
  | 	@In EntityManager entityManager;
  | 	
  | private Item item;
  | 	
  | 	public Item getItem() {
  | 		return item;
  | 	}
  | 
  | 	public void setItem(Item item) {
  | 		this.item = item;
  | 	}
  | 
  | 	@Create
  | 	@Begin(join=true)
  | 	public void newItem() {
  | 		item = new Item();
  | 		item.setName("some item");
  | 	}
  | 
  | 	public void clearItem() {
  | 		item = null;
  | 	}
  | }
  | 

Item is as follows

  | @Entity
  | public class Item {
  | 
  | 	@Id
  | 	@GeneratedValue
  | 	private long id;
  | 	
  | 	private String name;
  | 
  | 	public String getName() {
  | 		return name;
  | 	}
  | 
  | 	public void setName(String name) {
  | 		this.name = name;
  | 	}
  | 
  | 	public long getId() {
  | 		return id;
  | 	}
  | 
  | 	public void setId(long id) {
  | 		this.id = id;
  | 	}
  | }
  | 

Now this example will fail to remove the item text when you click the Clear Item link and it seems it is because the outjection failed to outject a null value for the item.

Now the interesting this is if you do ANY of the following the example will work:

1. Change item to a non @Entity pojo - example works or
2. Comment out the injection of the EntityManager - example works

Can anyone shed some light on this? I've spent a lot of time stepping through the seam source and even though after the invoke of the action method the item is set to null it mysteriously gets reset back to a value before outjection occurs.

Any help would be appreciated

Thanks

Troy


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

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4096928



More information about the jboss-user mailing list