Bug 778868 (SOA-1310)

Summary: Add QA for alternative jBPM enterprise configuration (JmsMessageServiceFactory, EntitySchedulerServiceFactory)
Product: [JBoss] JBoss Enterprise SOA Platform 4 Reporter: Martin Weiler <mweiler>
Component: Documentation, JBPM - within SOAAssignee: Martin Vecera <mvecera>
Status: CLOSED WONTFIX QA Contact:
Severity: urgent Docs Contact:
Priority: urgent    
Version: 4.3 CP01CC: minamoto
Target Milestone: ---   
Target Release: One Off Releases   
Hardware: Unspecified   
OS: Unspecified   
URL: http://jira.jboss.org/jira/browse/SOA-1310
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2011-09-23 12:44:03 UTC Type: Task
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Bug Depends On:    
Bug Blocks: 778886, 778896    

Description Martin Weiler 2009-05-13 13:35:20 UTC
Affects: Documentation (Ref Guide, User Guide, etc.)
Date of First Response: 2009-05-13 09:54:31
Help Desk Ticket Reference: https://enterprise.redhat.com/issue-tracker/288514
project_key: SOA

As per customers request, we need to provide an alternative configuration for jBPM which is using the jBPM enterprise components (JMS for async continuations, EJB timers) and add this config to the QA matrix.

Setup instructions:
------------------------

1. Copy jbpm-enterprise.jar to the jbpm.esb directory
2. Modify jbpm.cfg.xml to use JmsMessageServiceFactory and  EjbSchedulerServiceFactory (see. JBPM-1952):

 <!--
  <service name="message" factory="org.jbpm.msg.db.DbMessageServiceFactory" />
  <service name="scheduler" factory="org.jbpm.scheduler.db.DbSchedulerServiceFactory" />
 -->
  <service name="message">
    <factory>
      <bean class="org.jbpm.msg.jms.JmsMessageServiceFactory">
        <field name="connectionFactoryJndiName">
          <string value="java:/JmsXA"/>
        </field>
        <field name="destinationJndiName">
          <string value="queue/JbpmJobQueue"/>
        </field>
      </bean>
    </factory>
  </service>
  <service name="scheduler" factory="org.jbpm.scheduler.db.DbSchedulerServiceFactory" />

3. Modify jbpm.cfg.xml to reduce the number of threads from 1 to 0.

<field name="nbrOfThreads"><int value="0" /></field>

Comment 5 Martin Weiler 2009-05-15 07:38:52 UTC
Alejandro has provided the following input on the support case:

I have some remarks on the attached jBPM configuration:

1. Objects described in any external configuration file *override* objects of the same name in the default configuration provided with the product. The default configuration resource is located in org/jbpm/default.jbpm.cfg.xml within jbpm-jpdl.jar.

2. Objects not overridden in the external file keep the default value. Hence, if you do not need to change an object, avoid setting it explicitly, to allow for the defaults to change in future versions.

3. Do not set nbrOfThreads to 0. Instead, make the jbpm.job.executor object null, as follows:

<null name="jbpm.job.executor" />

This will prevent JobExecutor from being instantiated altogether.

4. All in all, your 'enterprise' configuration should strive to be as close to the settings used in the enterprise module. These settings are under continuous integration, and tested to work.

http://anonsvn.jboss.org/repos/jbpm/jbpm3/branches/jbpm-3.2.5.SP/modules/enterprise/src/main/etc/jbpm.cfg.xml


Comment 6 Martin Weiler 2009-05-15 07:51:55 UTC
re: 3. Do not set nbrOfThreads to 0. Instead, make the jbpm.job.executor object null, as follows: 

This results in a NullPointerException with the current ESB->jBPM integration at
        jbpmConfiguration.getJobExecutor().start() ;

in http://anonsvn.jboss.org/repos/labs/labs/jbossesb/workspace/platform/soa_tags/SOA-4.3.0.GA_CP1_CR7/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/configuration/JbpmService.java


Comment 8 Tom Baeyens 2009-05-15 09:04:04 UTC
this is potentially a pandora's box.  a customer is asking for something that we envisioned in the project, but for which we are not comfortable with the level of QA/maturity.

so just running the test suite with this configuration definitely does not give sufficient coverage.

so we risk that the test succeeds, we say to the client to go ahead with this and then the client potentially bumps into one problem after the other.  potential resource sink for us and a bad reputation.

that is why i think we should not go that path.   even if we have to disappoint one customer.

Comment 10 Taro Yasuma 2009-05-26 07:56:09 UTC
Link: Added: This issue is a dependency of SOA-1328


Comment 12 Len DiMaggio 2009-06-12 16:13:22 UTC
Link: Added: This issue is a dependency of SOA-1338


Comment 14 Len DiMaggio 2009-07-21 15:41:25 UTC
Affects: Added: [Documentation (Ref Guide, User Guide, etc.)]


Comment 15 trev 2009-08-14 13:04:09 UTC
Martin do, you need anything else to set up the QE

Comment 16 Alejandro Guizar 2009-08-14 18:35:03 UTC
Is it possible to port the JBPM-2094 test case, so that the customer will be assured their use case works as intended with the new message/scheduler service implementations.

Comment 17 Darran Lofthouse 2009-09-01 14:06:58 UTC
Link: Added: This issue is related to SOA-1476


Comment 18 Kevin Conner 2009-09-16 08:13:11 UTC
This is a public comment to clarify some misconceptions about the work done on this task.

I have to start by stating that this *does not* remove all instances of state state exceptions but only handles one particular area of conflict, specifically the use of multiple job executors over multiple servers/machines.

Using the DB job executor it is likely that there will be concurrent accesses to the *same job* from different machines, causing stale state exceptions to be generated.  This work removes that source of conflict and *no other*.  It is still possible for *different jobs* to modify the same process concurrently.

The original work queries a shared database to retrieve a list of jobs, thereby opening the potential for concurrent executors to execute the same job.  This work replaces the query using a JMS message, whereby the identity of the job to be executed is contained within the message. JMS is then responsible for managing the delivery of the message, thereby guaranteeing that only a single executor will process the job.