Using Seam 1.1.0.GA

I have a simple Seam component which is just for injecting a singleton session 
factory and a ManagedHibernateSession that uses it. (I'm aware of the 
HibernateSessionFactory component but I think this problem is more general).

First the session factory wrapper component.


  | @Name( "referenceSessionFactory" )
  | @Scope( ScopeType.APPLICATION )
  | @Intercept( InterceptionType.NEVER )
  | public class ReferenceSessionFactory
  | {
  |     @Unwrap
  |     public SessionFactory getSessionFactory()
  |     {
  |         return HibernateSession.getSessionFactory();
  |     }
  | }
  | 

And a test component


  | @Name( "test1" )
  | @Scope( ScopeType.EVENT )
  | public class Test1
  | {
  |     @In( create = true )
  |     private Session referenceSession;
  | 
  |     @Create
  |     public void init()
  |     {
  |         int i = 1;
  |     }
  | 
  |     public String getStr()
  |     {
  |         return "test1";
  |     }
  | }
  | 

and the components.xml piece.


  |   <!-- reference session factory wrapper component -->
  |   <component 
class="com.azure.spark.web.seam.component.ReferenceSessionFactory" 
auto-create="true"/>
  | 
  |   <!-- managed session from the reference session factory -->
  |   <core:managed-hibernate-session name="referenceSession" 
session-factory="#{referenceSessionFactory}"/>
  | 
  |   <component class="com.azure.spark.web.bean.security.Test1"/>
  | 

And my simple test page


  | <?xml version="1.0" encoding="UTF-8"?>
  | <!DOCTYPE html
  |      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  |      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
  | <html xmlns="http://www.w3.org/1999/xhtml";
  |       xmlns:ui="http://java.sun.com/jsf/facelets";
  |       xmlns:f="http://java.sun.com/jsf/core";
  |       xmlns:h="http://java.sun.com/jsf/html";>
  |   <head>
  |     <title></title>
  |   </head>
  |   <body>
  |     <h:outputText value="#{test1.str}"/>
  |   </body>
  | </html>
  | 

Now if I request a page that references the test1 component str property I get 
the following error.


  | java.lang.IllegalStateException: SessionFactory not found
  |     at 
org.jboss.seam.core.ManagedHibernateSession.getSessionFactoryFromJndiOrValueBinding(ManagedHibernateSession.java:156)
  |     at 
org.jboss.seam.core.ManagedHibernateSession.createSession(ManagedHibernateSession.java:81)
  |     at 
org.jboss.seam.core.ManagedHibernateSession.create(ManagedHibernateSession.java:69)
  | 

If I remove the @Create annotation from the test1 component then it works as 
expected (page just renders "test1").

It seems that there is some problem creating and injecting the hibernate 
session when it is the @Create method that is being intercepted (I can see the 
Component.callCreateMethod() further down in the stack trace).  I haven't seen 
this problem injecting other components, facesContext and the 
referenceSessionFactory seem to work fine.

More interestingly if I visit the test page it fails as above.  If I visit a 
different page that has a hibernate session injected and no @Create it works 
fine.  Then if I go back and refresh the test page the error changes to...


  | java.lang.ClassCastException: 
com.azure.spark.web.seam.component.ReferenceSessionFactory
  |     at 
org.jboss.seam.core.ManagedHibernateSession.getSessionFactoryFromJndiOrValueBinding(ManagedHibernateSession.java:153)
  |     at 
org.jboss.seam.core.ManagedHibernateSession.createSession(ManagedHibernateSession.java:81)
  |     at 
org.jboss.seam.core.ManagedHibernateSession.create(ManagedHibernateSession.java:69)
  | 

Which looks like it's finding something but it returns the Seam component 
itself rather than the result of the @Unwrap function.  This is also when 
intercepting the call to the @Create method of test1.

Appreciate any advice on whether I'm doing something wrong or if this is a 
possible bug.

Cheers.

Mike.

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

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

Reply via email to