Hello all!

After spending whole days trying to make this work, I gave up, asking for help.

First of all: we're embedding jBPM in our application. Our application already 
uses a db connection with an ORM strategy on its own. We then have to make jBPM 
with Hibernate to work together with our code (although using its own database).

With Spring, we configured a JtaTransactionManager with JBoss Transactions 
implementation. The whole thing is up and almost working. The problem is that 
we can't inject a HibernateSessionFactory to jBPM in a consistent way. I mean, 
given the following configuration in Spring:


  | <bean id="hibernateSessionFactory"
  |   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  |   <property name="dataSource">
  |     <ref bean="jbpmDataSource" />
  |   </property>
  |   <property name="configLocation"
  |     value="classpath:sysconf/hibernate.cfg.xml" />
  |   <property name="hibernateProperties"
  |     ref="hibernateConfigurationProperties" />
  |   <property name="jtaTransactionManager" ref="jbossTransactionManager" />
  | </bean>
  | 

where hibernateProperties is defined as follows:


  | <bean id="hibernateConfigurationProperties"
  |   class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  |   <property name="properties">
  |     <props>
  |       <prop key="hibernate.dialect">
  |         org.hibernate.dialect.HSQLDialect
  |       </prop>
  |       <prop key="hibernate.cache.provider_class">
  |         org.hibernate.cache.HashtableCacheProvider
  |       </prop>
  |       <prop key="hibernate.transaction.factory_class">
  |         org.hibernate.transaction.JTATransactionFactory
  |       </prop>
  |       <prop key="hibernate.current_session_context_class">jta</prop>
  |       <prop key="hibernate.connection.provider_class">
  |         
org.springframework.orm.hibernate3.TransactionAwareDataSourceConnectionProvider
  |       </prop>
  |     </props>
  |   </property>
  | </bean>
  | 
(please note that we don't want to set these properties in hibernate.cfg.xml, 
because we want our configuration to be managed by Spring as a whole)

Then, if we use something like this:


  | JbpmConfiguration jbpmConfiguration = 
JbpmConfiguration.parseInputStream(getClass().getResourceAsStream(
  |   "/sysconf/jbpm.cfg.xml"));
  | JbpmContext ctx = jbpmConfiguration.createJbpmContext();
  | ctx.setSessionFactory(mySessionFactory);
  | 
(where "mySessionFactory" is retrieved from Spring)

all seems to go ok. The problem is when we try to use the create and drop 
schema facilities of JbpmConfiguration 
(org.jbpm.JbpmConfiguration.createSchema() and 
org.jbpm.JbpmConfiguration.dropSchema()): those methods create a new 
JbpmContext by their own and we can't set the session factory into it.

We tried to make an extension of DbPersistenceServiceFactory that, upon 
construction, retrieves BOTH the SessionFactory AND the 
hibernateConfigurationProperties from Spring (otherwise the properties are not 
taken from the SessionFactory, but parsed again from the configuration file... 
!!!) and set it on itself, so that the new DbPersistenceService created should 
be automatically correctly configured; then, in jbpm.cfg.xml we set:


  | <jbpm-context>
  |   <service name="persistence">
  |     <factory>
  |       <bean class="our_own_DbPersistenceServiceFactory_ 
extension_class_name">
  |         <field name="isTransactionEnabled">
  |           <false />
  |         </field>
  |       </bean>
  |     </factory>
  |   </service>
  | <!-- ... -->
  | </jbpm-context>
  | 
(note: we set isTransactionEnabled to false because we don't want jBPM to 
control the transaction, it has to be controlled from the outside, through the 
global Spring transaction manager)

But in this way, we still have a problem: the 
TransactionAwareDataSourceConnectionProvider is not able to retrieve the 
dataSource when it is asked for a connection (it asks the thread local static 
variable 
org.springframework.orm.hibernate3.LocalSessionFactoryBean.configTimeDataSourceHolder
 for the datasource, but null is returned).

We debugged for hours trying to understand what the cleaner point in which 
inject our code would be, so that ALL the JbpmContext are created using the 
SessionFactory and the configuration properties we set up in Spring, but we 
couldn't success.

Please note that we don't want to use jBPM Spring module.

Thanks in advance to anyone who could help us to find the right approach.

Mauro.

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

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

Reply via email to