IllegalStateException: No Transaction: what have I missed?
weliwarmer Sep 4, 2007 8:13 AMHi,
I am maintaining someone else's code that uses JBoss Seam 1.1.0 GA. I'm just struggling with loading a DataModel: an IllegalStateException is thrown when the database query is run, stating that there is "No Transaction". I have just copied an existing, working bean so if someone could point out what I have missed, I would be grateful.
Thanks, Tim
Stack Trace....
java.lang.IllegalStateException: No transaction.
at org.jboss.tm.TxManager.setRollbackOnly(TxManager.java:751)
at org.hibernate.ejb.AbstractEntityManagerImpl.markAsRollback(AbstractEntityManagerImpl.java:392)
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:545)
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:567)
at org.hibernate.ejb.AbstractEntityManagerImpl.createNamedQuery(AbstractEntityManagerImpl.java:90)
at org.jboss.ejb3.entity.ExtendedEntityManager.createNamedQuery(ExtendedEntityManager.java:134)
Session Bean.....
@Stateful @Name("blogFinder") @Scope(ScopeType.CONVERSATION) @TransactionAttribute(NOT_SUPPORTED) public class BlogFinderAction implements BlogFinder, Serializable { ... @PersistenceContext(type = EXTENDED) private EntityManager em; @DataModel private List<Blog> latestBlogs; @DataModelSelection("latestBlogs") @Out(required = false, scope = ScopeType.CONVERSATION) private Blog latestBlog; @SuppressWarnings("unchecked") @Factory("latestBlogs") public void doBlogSearch() { latestBlogs = null; latestBlogs = em.createNamedQuery("blog.findAll").getResultList(); logger.debug("Retrieving articles for " + latestBlogs.size() + " blogs"); }
... entity bean .....
@Entity @Table(name="Blogs") @NamedQueries(value= { @NamedQuery(name="findAll", query="SELECT " + " a " + "FROM " + " Blog AS a ") } ) public class Blog implements Serializable { private static final Logger LOG = Logger.getLogger(Blog.class) ; private String url; @Id @Column(name="URL") @Length(min=0, max=1000, message="URL must be between 0 and 1000 characters.") public String getUrl() { return url ; } public void setUrl(String url) { this.url = url ; } }
.... jsf ....
<t:dataList value="#{latestBlogs}" var="blogArticle" rendered="#{not empty latestBlogs}"> article... #{blogArticle.url} </t:dataList>