[jboss-user] [JBoss Seam] - Object disappear
Phantom
do-not-reply at jboss.com
Wed Oct 31 07:58:18 EDT 2007
Good day,
Let me show you a real magic! But I don't know the secret... If you know it - please describe me! It's real problem for me...
1 Class:
| package xxx.finders;
|
| import org.jboss.seam.framework.EntityController;
| import org.jboss.seam.log.Log;
| import org.jboss.seam.annotations.Logger;
| import org.jboss.seam.annotations.Transactional;
| import xxx.Lecture;
|
| import java.util.List;
| import java.util.ArrayList;
|
| public class AbstractFinder<K>
| {
| private String query;
|
| private List<K> result;
|
|
| public final String getQuery()
| {
| return query;
| }
|
| public final void setQuery(String query)
| {
| this.query = query;
| }
|
| @Transactional
| public void search()
| {
| System.out.println("start search. This:"+this);
| this.result = searchResult();
| System.out.println("Cal result: "+result+" This:"+this);
| }
|
| @Transactional
| protected List<K> searchResult()
| {
| return new ArrayList<K>();
| }
|
| @Transactional
| public final List<K> getResult()
| {
| System.out.println("Start getResult. this:"+this);
| if(result==null)
| {
| System.out.println("searching"+this);
| search();
| System.out.println("Cal result: "+result+" This:"+this);
| }
| System.out.println("result: "+result+"this:"+this);
| return result;
| }
| }
|
2 class
| package xxx.finders;
|
| import xxx.testtree.Test;
|
| import java.util.List;
| import java.util.ArrayList;
|
| import org.jboss.seam.annotations.Name;
| import org.jboss.seam.annotations.Logger;
| import org.jboss.seam.annotations.In;
| import org.jboss.seam.annotations.Scope;
| import org.jboss.seam.log.Log;
| import org.jboss.seam.ScopeType;
|
| import javax.persistence.EntityManager;
|
| @Name("testFinder")
| public class TestFinder extends AbstractFinder<Test>
| {
| @In
| private EntityManager entityManager;
|
| @Logger
| private Log log;
|
| protected List<Test> searchResult()
| {
| log.info("Invoked!!!");
| String query = getQuery();
| if(query==null || query.equals(""))
| {
| List<Test> tests = (List<Test>)entityManager.createQuery("select object(t) from Test t order by t.title").getResultList();
| log.info("Tests: "+tests);
| return tests;
| }
| else
| {
| List<Test> ret = new ArrayList<Test>();
| String sql = "select object(t) from Test t where t.title like :query order by t.title";
| ret.addAll(entityManager.createQuery(sql).setParameter("query", "%"+query+"%").getResultList());
| sql = "select object(t) from Test t, Domain d where t.domain=d and d.title like :query order by t.title";
| ret.addAll(entityManager.createQuery(sql).setParameter("query", "%"+query+"%").getResultList());
| return ret;
| }
| }
| }
|
Now the magic!
Externaly from JSF page I'm trying to get result property from 'testfinder' bean. And there I recieve null! But look to the logs:
| 2007-10-31 14:43:09,921 INFO [STDOUT] start search. This:xxx.finders.TestFinder at f09d3d
| 2007-10-31 14:43:09,921 INFO [xxx.finders.TestFinder] Invoked!!!
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.jdbc.ConnectionManager] opening JDBC connection
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.SQL] select test0_.test_id as test1_74_, test0_.title as title74_, test0_.content as content74_, test0_.author_id as author5_74_, test0_.domain_id as domain4_74_ from tests test0_ order by test0_.title
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to open ResultSet (open ResultSets: 0, globally: 0)
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.loader.Loader] result row: EntityKey[xxx.testtree.Test#1]
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to close ResultSet (open ResultSets: 1, globally: 1)
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.jdbc.ConnectionManager] aggressively releasing JDBC connection
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.jdbc.ConnectionManager] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.engine.StatefulPersistenceContext] initializing non-lazy collections
| 2007-10-31 14:43:09,921 INFO [xxx.finders.TestFinder] Tests: [xxx.testtree.Test at 1]
| 2007-10-31 14:43:09,921 INFO [STDOUT] Cal result: [xxx.testtree.Test at 1] This:xxx.finders.TestFinder at f09d3d
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.ejb.AbstractEntityManagerImpl] Looking for a JTA transaction to join
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.ejb.AbstractEntityManagerImpl] Transaction already joined
| 2007-10-31 14:43:09,921 INFO [STDOUT] Cal result: null This:xxx.finders.TestFinder at f09d3d
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.ejb.AbstractEntityManagerImpl] Looking for a JTA transaction to join
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.ejb.AbstractEntityManagerImpl] Transaction already joined
| 2007-10-31 14:43:09,921 INFO [STDOUT] result: nullthis:xxx.finders.TestFinder at f09d3d
|
Most interesting (the first and the last line):
| 2007-10-31 14:43:09,921 INFO [STDOUT] Cal result: [xxx.testtree.Test at 1] This:xxx.finders.TestFinder at f09d3d
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.ejb.AbstractEntityManagerImpl] Looking for a JTA transaction to join
| 2007-10-31 14:43:09,921 DEBUG [org.hibernate.ejb.AbstractEntityManagerImpl] Transaction already joined
| 2007-10-31 14:43:09,921 INFO [STDOUT] Cal result: null This:xxx.finders.TestFinder at f09d3d
|
That's mean that object disapear somewhere between method invokation! But where and why???
Please, help me!
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4100602#4100602
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4100602
More information about the jboss-user
mailing list