IMHO returning Hibernate objects with webservice isn't a good idea.
Such objects often have parent<->child relations which is hard to send
using document style. Maybe you can introduce DTOs.

On 5/17/07, Bill Graham <[EMAIL PROTECTED]> wrote:

This is probably caused by Hibernate lazy loading. The Hibernate session was
closed before the XFire servlet called methods on your beans to marshall
into XML. The fix is to use Spring's OpenSessionInViewFilter around your
XFire servlet.


----- Original Message ----
From: Slawomir Krolik <[EMAIL PROTECTED]>
To: [email protected]
Sent: Wednesday, May 16, 2007 5:30:57 PM
Subject: [xfire-user] Hibernate+Spring+XFire could not initialize proxy -
the owning Session was closed

Hi!

I have problem and I didn't found any solution after few days of searching
When I'm trying to any lazy initialized collection or object I've got sth
like that:
-----------cut----------------------
ERROR - LazyInitializationException.<init>(19) | could not
initialize proxy - the owning Session was closed
org.hibernate.LazyInitializationException: could not
initialize proxy - the owning Session was closed
    at
org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:60)
    at
org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
    at
org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke
(CGLIBLazyInitializer.java:172)
    at
org.saweko.om.security.model.Role$$EnhancerByCGLIB$$50c1ce29.fillDTO(<generated>)
    at
org.saweko.om.security.model.User.fillDTO(User.java:195)
...
-----------cut----------------------
I'm using Spring 2.05 with XFire 1.6 and Hibernate 3.2.0
I'm using JSR181 anotations to expose my SecurityService(interface) and
SecurityServiceImpl(Implementation class) as XFire WS

My application structure:


[Permissions]----(Set)many-to-one----[User]---(Set)many-to-one---[Role]
<Persistent>, collections are bi-directional

next I've DAO's objects that operates on POJO's, mostly CRUD operations, one
persistent object type - one DAO to perform operations
DAO classes are used by one class named Security Controller that perform
more complicated operations
next Security Controller is wrapped using TransactionProxyFactoryBean for
proper handling transactions
and finally there is interface called SecurityService and implementing it
class SecurityServiceImpl that uses proxied SecurityController class for
exposing
it's operations as web service using JSR181

Operations performed on simple data types works perfectly, operations
working with collections of simple data types like Set<String> works good
too but
when I try access any of lazy initialized objects exception occurs
My applicationContext.xml:

    <import
resource="classpath:org/codehaus/xfire/spring/xfire.xml"
/>
    <bean id="xfire.annotationServiceFactory"

class="org.codehaus.xfire.annotations.AnnotationServiceFactory
">
        <constructor-arg index="0">
            <ref bean="xfire.commonsAnnotations" />
        </constructor-arg>
        <constructor-arg index="1">
            <ref bean="xfire.transportManager" />
        </constructor-arg>
        <constructor-arg index="2">
            <ref bean="xfire.aegisBindingProvider " />
        </constructor-arg>
    </bean>
    <bean id="xfire.commonsAnnotations"

class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations"
/>
     <bean id="LocalDB"
   ...connection 2 local postgresql db .../>
<bean id="HBSessionFactory"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
....hibernate session factory
    </bean>
    <bean id="userDAOtarget"
.../>
    <bean id="roleDAOtarget"
.../>
     <bean id="permissionDAOtarget"
.../>
<bean id="securityCtrlTarget"

class="org.saweko.om.security.ctrl.impl.SecurityController">
        <property name="userDAO">
            <ref bean="userDAOtarget" />
        </property>
        <property name="roleDAO">
            <ref bean="roleDAOtarget" />
        </property>
        <property name="permissionDAO">
            <ref bean="permissionDAOtarget" />
        </property>
    </bean>

    <bean id="securityControllerProxy"

class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean
">
        <property name="transactionManager">
            <ref bean="transactionManager" />
        </property>
        <property name="target">
             <ref bean="securityCtrlTarget" />
        </property>
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>
    <bean id="transactionManager"

class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref bean="HBSessionFactory" />
        </property>
    </bean>
    <bean id="securityServiceBean"

class="org.saweko.om.service.impl.SecurityServiceImpl">
        <property name="securityController">
            <ref bean="securityControllerProxy" />
        </property>
    </bean>
    <bean id="securityServiceXfire"

class="org.codehaus.xfire.spring.remoting.XFireExporter">
        <property name="serviceBean">
            <ref bean="securityServiceBean" />
        </property>
        <property name="serviceClass">
            <value>

org.saweko.om.service.impl.SecurityServiceImpl
            </value>
        </property>
        <property name="serviceFactory">
            <ref bean="xfire.annotationServiceFactory" />
        </property>
    </bean>
    <bean id="addressingHandler"

class="org.codehaus.xfire.addressing.AddressingInHandler"
/>


What is solution 2 problem?





 ________________________________
Yahoo! oneSearch: Finally, mobile search that gives answers, not web links.


--
-----
When one of our products stops working, we'll blame another vendor
within 24 hours.

---------------------------------------------------------------------
To unsubscribe from this list please visit:

   http://xircles.codehaus.org/manage_email

Reply via email to