I have using Spring2 + Hibernate3 + Xfire1.2.6. for two applications.
When one app A calls a WS on the other app B, the service method runs without
exceptions nor errors.
However, when there are objects (models) that happens to be get from a dao
hibernate AND somehow property value being modified in the service method (no
matter the modification is done by calling a sub method or what), the result
will be all objects with new values are saved to DB at the end of the day...
but the coding does not contain any save method!
A test I wrote on app B:
Model Object-
/**
* @struts.form include-all="true" extends="BaseForm"
* @hibernate.class
* table="TBL_ATEST"
*
*/
public class Atest extends baseObject implements java.io.Serializable {
private Long id;
private String val1;
...getter and setter...
...override tostring(), equals(), hashcode()
}
Dao hibernate-
public class xxxDaoHibernate extends BaseDaoHibernate implements xxxDao {
...
public Atest getAtest(final Long id) {
Atest atest = (Atest) getHibernateTemplate().get(Atest.class, id);
if (atest == null) {
log.warn("uh oh, atest with id '" + id + "' not found...");
throw new ObjectRetrievalFailureException(Atest.class, id);
}
return atest;
}
...
}
Service Method-
/**
*
* Tell xfire, which objects it will find in the List
* @aegis.method
* @aegis.method-return-type componentType="java.lang.String"
*/
public String atestService(...something...) {
Atest a = dao.getAtest(new Long("1"));
a.setVal1("222");
return "S";
}
Service XML-
<bean name="ekaService" class="org.codehaus.xfire.spring.ServiceBean">
<property name="serviceBean" ref="mdmsptylinkManager"/>
<property name="serviceClass" value="com.eg.tsi.service.EkaWebService"/>
<property name="inHandlers">
<list>
<ref bean="addressingHandler"/>
</list>
</property>
</bean>
<bean id="addressingHandler"
class="org.codehaus.xfire.addressing.AddressingInHandler"/>
I have a DB table with the record id=1, val1='111'. As you can guess, after
invoking the service from app A, everything process as expected except now val2
becomes "222".
A work around on this problem is to create a differnet instant of the same
object, and clone all values to from the 'old' dao hibernate get object to
the 'new' object such that all object manipulations will be done on the 'new'
object.
And yes, the 'old' object won't be saved if nothing change on it in this case.
I already have an up and running business application using the work around
which is working fine. However, this strange problem should better be solved in
the long run.
Any idea on this? is this a transaction handling problem? or xfire/hibernate
configuration issues?
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]