郁闷几天了,大家帮帮忙~

Bluesnails 2007-11-15
使用SpringMoudle整合Spring和JBPM,本来想参照JbpmTemplate的写法对JBPM的功能进行封装,结果由于延迟加载问题出现异常,后来测试JbpmTemplate提供的方法,发现竟然也有类似的问题,以jbpmTemplate.findProcessInstance为例:


public class TestProcessServiceImpl extends TestCase {

private ApplicationContext applicationContext;
private JbpmTemplate jbpmTemplate;

protected void setUp() throws Exception {
super.setUp();
applicationContext = new ClassPathXmlApplicationContext("platform_workflow_ manager_local.xml");
out.println("Creating ApplicationContex-------"+applicationContext );
jbpmTemplate = (JbpmTemplate)applicationContext.getBean("jbpmTemp late");
}

public void testTemplate(){
ProcessInstance p =jbpmTemplate.findProcessInstance(1L);
out.println("======="+p.getId());
}
}
==========
运行时就会产生如下异常
----------
ERROR [org.hibernate.LazyInitializationException] - <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.initia lize(AbstractLazyInitializer.java:60)
at org.hibernate.proxy.AbstractLazyInitializer.getImp lementation(AbstractLazyInitializer.java:111)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitialize r.invoke(CGLIBLazyInitializer.java:150)
at org.jbpm.graph.exe.ProcessInstance$$EnhancerByCGLI B$$5d7ec21a.toString(<generated>)
-----------

Jbpmtemplate对象正常获得了。并不是所有方法都会产生此异常,当返回值为对象时,由于Hibernate的延迟加载,就会产生此异常。<font color="red">是我的代码或者配置有问题,还是根本不应该这么用? 折腾了两天了,一点儿进展都没有,哪位吧....</font>,附上我的Spring 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="no" default-lazy-init="false"
default-dependency-check="none">

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>net.sourceforge.jtds.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:jtds:sqlserver://localhost:1433/jbpmdemo</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>sa</value>
</property>
</bean>
<!-- Hibernate SessionFactory -->
<bean id="workflowSessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="configLocations">
<list>
<value>
classpath:workflow/hibernate.cfg.xml
</value>
</list>
</property>
<!-- TODO -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>

<prop key="hibernate.show_sql">true</prop>
<!--
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.HashtableCacheProvider
</prop>
-->
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
<prop key="hibernate.query.factory_class">
org.hibernate.hql.ast.ASTQueryTranslatorFactory
</prop>
</props>
</property>
</bean>

<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="workflowSessionFactory" />
</property>
</bean>

<bean id="jbpmConfiguration"
class="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean">
<property name="sessionFactory" ref="workflowSessionFactory" />
<property name="configuration"
value="classpath:workflow/jbpm.cfg.xml" />
<property name="createSchema" value="false" />
</bean>

<bean id="jbpmTemplate"
class="org.springmodules.workflow.jbpm31.JbpmTemplate">
<constructor-arg index="0" ref="jbpmConfiguration" />
</bean>
</beans>


我吧~~~~~~~~