郁闷几天了,大家帮帮忙~
|
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> 我吧~~~~~~~~ |

