Uploaded image for project: 'Red Hat Process Automation Manager'
  1. Red Hat Process Automation Manager
  2. RHPAM-4312

Non-existing [SLA]... timer with session id=0 shown when using REST API to list all available timers in migrated process instance

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 7.13.1.GA, IBM BAMOE 8.0.1.GA
    • 7.11.1.GA
    • jBPM Core
    • False
    • None
    • False
    • Release Notes
    • CR1
    • ?
    • Workaround Exists
    • Hide

      We can use byteman to address the issue of the additional "[SLA]..." timer:

      1. Download and unzip byteman [1]

      2. Create a file FixSlaTimerIssueWithLegacyProcesses.btm with the following content:

      RULE Fix slatimer node
      CLASS org.jbpm.marshalling.impl.JBPMMessages$ProcessInstance$NodeInstance
      METHOD getSlaTimerId
      AT EXIT
      BIND slaTimerId:long = $!
      IF (slaTimerId == 0)
      DO

      1. System.out.println("[BYTEMAN] overwriting node.getSlaTimerId return -1 instead of: " + slaTimerId + " for node instance " + $0);
        return -1;
        ENDRULE

      RULE Fix HT node errorHandlingProcessInstanceId
      CLASS org.jbpm.marshalling.impl.JBPMMessages$ProcessInstance$NodeInstanceContent$HumanTaskNode
      METHOD getErrorHandlingProcessInstanceId
      AT EXIT
      BIND errorHandlingProcessInstanceId:long = $!
      IF (errorHandlingProcessInstanceId == 0)
      DO

      1. System.out.println("[BYTEMAN] overwriting HumanTaskNode.getErrorHandlingProcessInstanceId return -1 instead of: " + errorHandlingProcessInstanceId + " for work item " + $0.getWorkItemId());
        return -1;
        ENDRULE  

      3. Edit $RHPAM_HOME/bin/standalone.conf

      if [ "x$JAVA_OPTS" = "x" ]; then
      JAVA_OPTS="-Xms1303m -Xmx1303m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=1024m -Djava.net.preferIPv4Stack=true"
      JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"

      1. enable byteman to address timer issues with legacy process instances
        BYTEMAN_HOME="/data/jboss/work/byteman-download-4.0.18"
        SCRIPT_HOME="/home/mweiler/support/03200412"
        SCRIPT_NAME="FixSlaTimerIssueWithLegacyProcesses.btm"
        JAVA_OPTS="$JAVA_OPTS -javaagent:$BYTEMAN_HOME/lib/byteman.jar=script:$SCRIPT_HOME/$SCRIPT_NAME -Dorg.jboss.byteman.verbose=true"
        else
        echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
        fi

      4. The /timers REST call should no longer be returning the empty [SLA]... timer

      [1]
      https://byteman.jboss.org/downloads.html

      Show
      We can use byteman to address the issue of the additional " [SLA] ..." timer: 1. Download and unzip byteman [1] 2. Create a file FixSlaTimerIssueWithLegacyProcesses.btm with the following content: RULE Fix slatimer node CLASS org.jbpm.marshalling.impl.JBPMMessages$ProcessInstance$NodeInstance METHOD getSlaTimerId AT EXIT BIND slaTimerId:long = $! IF (slaTimerId == 0) DO System.out.println(" [BYTEMAN] overwriting node.getSlaTimerId return -1 instead of: " + slaTimerId + " for node instance " + $0); return -1; ENDRULE RULE Fix HT node errorHandlingProcessInstanceId CLASS org.jbpm.marshalling.impl.JBPMMessages$ProcessInstance$NodeInstanceContent$HumanTaskNode METHOD getErrorHandlingProcessInstanceId AT EXIT BIND errorHandlingProcessInstanceId:long = $! IF (errorHandlingProcessInstanceId == 0) DO System.out.println(" [BYTEMAN] overwriting HumanTaskNode.getErrorHandlingProcessInstanceId return -1 instead of: " + errorHandlingProcessInstanceId + " for work item " + $0.getWorkItemId()); return -1; ENDRULE   3. Edit $RHPAM_HOME/bin/standalone.conf if [ "x$JAVA_OPTS" = "x" ]; then JAVA_OPTS="-Xms1303m -Xmx1303m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=1024m -Djava.net.preferIPv4Stack=true" JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true" enable byteman to address timer issues with legacy process instances BYTEMAN_HOME="/data/jboss/work/byteman-download-4.0.18" SCRIPT_HOME="/home/mweiler/support/03200412" SCRIPT_NAME="FixSlaTimerIssueWithLegacyProcesses.btm" JAVA_OPTS="$JAVA_OPTS -javaagent:$BYTEMAN_HOME/lib/byteman.jar=script:$SCRIPT_HOME/$SCRIPT_NAME -Dorg.jboss.byteman.verbose=true" else echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS" fi 4. The /timers REST call should no longer be returning the empty [SLA] ... timer [1] https://byteman.jboss.org/downloads.html
    • Hide

      1. In mysql, create a database 'bpms64kie':
      $ mysql -u root -p -e "create database bpms64kie";

      2. Import the dump:
      $ mysql -u root -p bpms64kie < bpms64kie_db.dump

      3. Grant access to user jboss/jboss:
      $ mysql -u root -p -e "grant all privileges on bpms64kie.* to 'jboss'@'localhost'";

      4. Configure the RHPAM 7.x instance:
      <property name="org.kie.server.persistence.ds" value="java:jboss/datasources/mysqlpamDS"/>
      <property name="org.kie.server.persistence.dialect" value="org.hibernate.dialect.MySQL57InnoDBDialect"/>
      <property name="hibernate.hbm2ddl.auto" value="none"/>

      <xa-datasource jndi-name="java:jboss/datasources/mysqlpamDS" pool-name="mysqlpamDS">
      <xa-datasource-property name="URL">
      jdbc:mysql://localhost:3306/bpms64kie
      </xa-datasource-property>
      <driver>mysql</driver>
      <security>
      <user-name>jboss</user-name>
      <password>jboss</password>
      </security>
      <xa-pool>
      <min-pool-size>10</min-pool-size>
      <max-pool-size>100</max-pool-size>
      </xa-pool>
      <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
      </validation>
      </xa-datasource>
      <xa-datasource jndi-name="java:jboss/datasources/ejb_timer" pool-name="ejb_timer">
      <xa-datasource-property name="URL">
      jdbc:mysql://localhost:3306/bpms64kie
      </xa-datasource-property>
      <driver>mysql</driver>
      <security>
      <user-name>jboss</user-name>
      <password>jboss</password>
      </security>
      <xa-pool>
      <min-pool-size>10</min-pool-size>
      <max-pool-size>100</max-pool-size>
      </xa-pool>
      <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
      </validation>
      </xa-datasource>

      5. Start the RHPAM instance / kie-server

      6. Run the script:
      $ sh
      case03200412.sh
      true
      ...
      Process 9 created for process case03200412.timertest
      ...
      > GET /kie-server/services/rest/server/admin/containers/example:case03200412:1.0/processes/instances/9/timers HTTP/1.1
      {
      "timer-instance" : [ {
      "name" : "do something-",
      "id" : 1,
      "timer-id" : 1,
      "activation-time" :

      { "java.util.Date" : 1652132074566 }

      ,
      "last-fire-time" : null,
      "next-fire-time" : {
      "java.util.Date" : 1665424800000
      },
      "delay" : 13292725434,
      "period" : 0,
      "repeat-limit" : -1,
      "process-instance-id" : 9,
      "session-id" : 20
      } ]

      // compare this to the instance 6, which has been created in BPMS 6.4
      > GET /kie-server/services/rest/server/admin/containers/example:case03200412:1.0/processes/instances/6/timers HTTP/1.1
      {
      "timer-instance" : [

      { "name" : "[SLA]do something", "id" : 0, "timer-id" : 0, "activation-time" : null, "last-fire-time" : null, "next-fire-time" : null, "delay" : 0, "period" : 0, "repeat-limit" : 0, "process-instance-id" : 0, "session-id" : 0 }

      , {
      "name" : "",
      "id" : 1,
      "timer-id" : 1,
      "activation-time" :

      { "java.util.Date" : 1652129630737 }

      ,
      "last-fire-time" : null,
      "next-fire-time" : {
      "java.util.Date" : 1665424800000
      },
      "delay" : 13295169263,
      "period" : 0,
      "repeat-limit" : 0,
      "process-instance-id" : 6,
      "session-id" : 15
      } ]

      Show
      1. In mysql, create a database 'bpms64kie': $ mysql -u root -p -e "create database bpms64kie"; 2. Import the dump: $ mysql -u root -p bpms64kie < bpms64kie_db.dump 3. Grant access to user jboss/jboss: $ mysql -u root -p -e "grant all privileges on bpms64kie.* to 'jboss'@'localhost'"; 4. Configure the RHPAM 7.x instance: <property name="org.kie.server.persistence.ds" value="java:jboss/datasources/mysqlpamDS"/> <property name="org.kie.server.persistence.dialect" value="org.hibernate.dialect.MySQL57InnoDBDialect"/> <property name="hibernate.hbm2ddl.auto" value="none"/> <xa-datasource jndi-name="java:jboss/datasources/mysqlpamDS" pool-name="mysqlpamDS"> <xa-datasource-property name="URL"> jdbc:mysql://localhost:3306/bpms64kie </xa-datasource-property> <driver>mysql</driver> <security> <user-name>jboss</user-name> <password>jboss</password> </security> <xa-pool> <min-pool-size>10</min-pool-size> <max-pool-size>100</max-pool-size> </xa-pool> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/> <validate-on-match>true</validate-on-match> <background-validation>false</background-validation> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/> </validation> </xa-datasource> <xa-datasource jndi-name="java:jboss/datasources/ejb_timer" pool-name="ejb_timer"> <xa-datasource-property name="URL"> jdbc:mysql://localhost:3306/bpms64kie </xa-datasource-property> <driver>mysql</driver> <security> <user-name>jboss</user-name> <password>jboss</password> </security> <xa-pool> <min-pool-size>10</min-pool-size> <max-pool-size>100</max-pool-size> </xa-pool> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/> <validate-on-match>true</validate-on-match> <background-validation>false</background-validation> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/> </validation> </xa-datasource> 5. Start the RHPAM instance / kie-server 6. Run the script: $ sh case03200412.sh true ... Process 9 created for process case03200412.timertest ... > GET /kie-server/services/rest/server/admin/containers/example:case03200412:1.0/processes/instances/9/timers HTTP/1.1 { "timer-instance" : [ { "name" : "do something-", "id" : 1, "timer-id" : 1, "activation-time" : { "java.util.Date" : 1652132074566 } , "last-fire-time" : null, "next-fire-time" : { "java.util.Date" : 1665424800000 }, "delay" : 13292725434, "period" : 0, "repeat-limit" : -1, "process-instance-id" : 9, "session-id" : 20 } ] // compare this to the instance 6, which has been created in BPMS 6.4 > GET /kie-server/services/rest/server/admin/containers/example:case03200412:1.0/processes/instances/6/timers HTTP/1.1 { "timer-instance" : [ { "name" : "[SLA]do something", "id" : 0, "timer-id" : 0, "activation-time" : null, "last-fire-time" : null, "next-fire-time" : null, "delay" : 0, "period" : 0, "repeat-limit" : 0, "process-instance-id" : 0, "session-id" : 0 } , { "name" : "", "id" : 1, "timer-id" : 1, "activation-time" : { "java.util.Date" : 1652129630737 } , "last-fire-time" : null, "next-fire-time" : { "java.util.Date" : 1665424800000 }, "delay" : 13295169263, "period" : 0, "repeat-limit" : 0, "process-instance-id" : 6, "session-id" : 15 } ]
    • ---
    • ---
    • 2022 Week 17-19 (from Apr 25), 2022 Week 20-22 (from May 16), 2022 Week 23-25 (from Jun 6), 2022 Week 26-28 (from Jun 27), 2022 Week 29-31 (from Jul 18), 2022 Week 32-34 (from Aug 8)

    Description

      This timer is created when executing process migrated from BPMS 6.4 containing human task with boundary timer. 

       

      Attachments

        Issue Links

          Activity

            People

              rhn-support-egonzale Enrique Gonzalez Martinez (Inactive)
              rhn-support-bkramer1 Biljana Kramer
              Gonzalo Muñoz Fernández Gonzalo Muñoz Fernández
              Gonzalo Muñoz Fernández Gonzalo Muñoz Fernández
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: