[jBPM] - jbpm5 scale out reference architecture..
by Affan Dar
Affan Dar [https://community.jboss.org/people/affandar] created the discussion
"jbpm5 scale out reference architecture.."
To view the discussion, visit: https://community.jboss.org/message/717611#717611
--------------------------------------------------------------
After scavenging the forums and docs for jbpm 5 over the last week, I have drafted up the attached 'reference architecture' for a scalable jBPM 5 deployment. Would love to get feedback (aka ripped apart :) ).
Here are the key pieces:
1. A shared KnowlegeBase which acts as a repository of processes across the whole deployment (master-slave replicated with writes-to-master and reads-from-slaves etc etc)
2. There are a fixed number of KnowledgeSessions spread across DBs in a DB farm (DB1, DB2)
3. A table contains the mapping between these sessions, the database that they are stored in and the node that is assigned to these sessions. Management of the data in this table is an admin config operation (either automatic or manual).
4. A number of worker nodes which load the KnowledgeSessions that belong to them (as per the table above)
5. Another table that has mapping of processes-to-sessions. This table is updated by the worker nodes when a new process is created.
6. A router or client proxy that routes process instance managment requests as per the following rules:
- For process instance creation requests, round robin to any node
- For requests pertaining to a specific process instance, consult the table in (5) & (6) and route to appropriate node
Now how to scale out:
- If the bottleneck is the CPU/memory of the worker nodes then add more nodes and rebalance the session distribution in table (3)
- If the bottleneck is the DB capacity or disk then add a database, migrate processes/session data to the new database and update table (3)
Of course the resharding above is crude and manual and can probably be more sophisticated but would love to hear thoughts/comments on the basic idea.
Also practically speaking, I hope it is possible to migrate a session and processes to a different DB at all?
Thanks
--------------------------------------------------------------
Reply to this message by going to Community
[https://community.jboss.org/message/717611#717611]
Start a new discussion in jBPM at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&con...]
11 years, 10 months
[jBPM] - Restore JBPM session
by new bee
new bee [https://community.jboss.org/people/newbird] created the discussion
"Restore JBPM session"
To view the discussion, visit: https://community.jboss.org/message/750414#750414
--------------------------------------------------------------
Hi,
I am new to JBPM and struggling to understand the flow.............
I red that we can store jbpm session,process instance,task instance and variables...etc...............
After some point, assume application crashes and want to restore all running sessions how would i do?
Do i need to get each process id/session id from the session and again start it?
If i do in the above way, from which point it will start the session like it already proesses two nodes....How it will know to start from node3? Do i need to configure that also. If how would i?
Also red in discussions that after restoring the session, we need to again register action handlers? Is it true?
What is the use task server ,task service and task client? How they are different from workitem handler?
Please reply............................................. :-/
--------------------------------------------------------------
Reply to this message by going to Community
[https://community.jboss.org/message/750414#750414]
Start a new discussion in jBPM at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&con...]
11 years, 10 months
[jBPM] - Re: Restore JBPM session
by Thomas Setiabudi
Thomas Setiabudi [https://community.jboss.org/people/thomas.setiabudi] created the discussion
"Re: Restore JBPM session"
To view the discussion, visit: https://community.jboss.org/message/752944#752944
--------------------------------------------------------------
I think the process should continue from before application crash point.
Lets take the com.sample.evaluation included in the jbpm5.3 full installer.
First step, we initiate the process instance lets say we pass in krisv as the employee name
Second step, krisv look at his task list and then complete his task
Third step, john look at his task list and then complete his task
Fourth step, Mary look at her task list, but when she tries to complete her task, application crash.
so we stop everything and restart
After restart, Mary should be able to see the task in the task list and complete it.
Isn't that the default behavior right now? Or do I misunderstand your question?
Regards,
Thomas Setiabudi
--------------------------------------------------------------
Reply to this message by going to Community
[https://community.jboss.org/message/752944#752944]
Start a new discussion in jBPM at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&con...]
11 years, 10 months
[jBPM] - error when run "ant start.demo.db" with jbpm5.3 and mysql 5.5
by Kehua Gao
Kehua Gao [https://community.jboss.org/people/kehuagao] created the discussion
"error when run "ant start.demo.db" with jbpm5.3 and mysql 5.5"
To view the discussion, visit: https://community.jboss.org/message/766988#766988
--------------------------------------------------------------
check.jboss.version:
start.jboss5:
check.jboss.version:
start.jboss7:
start.human.task:
[mkdir] Created dir: D:\jbpm-installer\task-service\target
[javac] Compiling 1 source file to D:\jbpm-installer\task-service\target
[copy] Copying 6 files to D:\jbpm-installer\task-service\target
[java] 0 19/10 17:00:09,210[main] ERROR tool.hbm2ddl.SchemaExport.execut
e - schema export unsuccessful
[java] com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communicati
ons link failure
[java]
[java] The last packet sent successfully to the server was 0 milliseconds a
go. The driver has not received any packets from the server.
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeC
onstructorAccessorImpl.java:39)
[java] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Del
egatingConstructorAccessorImpl.java:27)
[java] at java.lang.reflect.Constructor.newInstance(Constructor.java:51
3)
[java] at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
[java] at com.mysql.jdbc.SQLError.createCommunicationsException(SQLErro
r.java:1116)
[java] at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
[java] at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java
:2332)
[java] at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImp
l.java:2369)
[java] at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java
:2153)
[java] at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
[java] at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47
)
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeC
onstructorAccessorImpl.java:39)
[java] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Del
egatingConstructorAccessorImpl.java:27)
[java] at java.lang.reflect.Constructor.newInstance(Constructor.java:51
3)
[java] at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
[java] at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java
:381)
[java] at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDri
ver.java:305)
[java] at java.sql.DriverManager.getConnection(DriverManager.java:582)
[java] at java.sql.DriverManager.getConnection(DriverManager.java:154)
[java] at org.hibernate.connection.DriverManagerConnectionProvider.getC
onnection(DriverManagerConnectionProvider.java:133)
[java] at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnecti
onHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51)
[java] at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.
java:252)
[java] at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.j
ava:211)
[java] at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryIm
pl.java:353)
[java] at org.hibernate.cfg.Configuration.buildSessionFactory(Configura
tion.java:1341)
[java] at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory
(AnnotationConfiguration.java:867)
[java] at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory
(Ejb3Configuration.java:669)
[java] at org.hibernate.ejb.HibernatePersistence.createEntityManagerFac
tory(HibernatePersistence.java:126)
[java] at javax.persistence.Persistence.createEntityManagerFactory(Pers
istence.java:52)
[java] at javax.persistence.Persistence.createEntityManagerFactory(Pers
istence.java:34)
[java] at org.jbpm.DemoTaskService.main(Unknown Source)
[java] Caused by: java.net.UnknownHostException: localhost
[java] at java.net.InetAddress.getAllByName0(InetAddress.java:1157)
[java] at java.net.InetAddress.getAllByName(InetAddress.java:1083)
[java] at java.net.InetAddress.getAllByName(InetAddress.java:1019)
[java] at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFa
ctory.java:247)
[java] at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
[java] ... 26 more
[java] 3198 19/10 17:00:12,408[main] ERROR hibernate.util.JDBCExceptionRepo
rter.logExceptions - Communications link failure
[java]
[java] The last packet sent successfully to the server was 0 milliseconds a
go. The driver has not received any packets from the server.
[java] 3198 19/10 17:00:12,408[main] WARN service.persistence.TaskLocalTra
nsactionManager.begin - Unable to begin transaction
[java] javax.persistence.PersistenceException: org.hibernate.exception.JDBC
ConnectionException: Cannot open connection
[java] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceE
xception(AbstractEntityManagerImpl.java:614)
[java] Exception in thread "main" java.lang.RuntimeException: Unable to beg
in transaction
[java] at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:
41)
[java] at org.jbpm.task.service.persistence.TaskLocalTransactionManager
.begin(TaskLocalTransactionManager.java:46)
[java] at org.jbpm.task.service.persistence.TaskLocalTransactionManager
.begin(TaskLocalTransactionManager.java:42)
[java] at org.jbpm.task.service.persistence.TaskPersistenceManager.begi
nTransaction(TaskPersistenceManager.java:79)
[java] at org.jbpm.task.service.persistence.TaskPersistenceManager.begi
nTransaction(TaskPersistenceManager.java:79)
[java] at org.jbpm.task.service.persistence.TaskPersistenceManager.getU
nescalatedDeadlines(TaskPersistenceManager.java:144)
[java] at org.jbpm.task.service.persistence.TaskPersistenceManager.getU
nescalatedDeadlines(TaskPersistenceManager.java:144)
[java] at org.jbpm.task.service.TaskServiceSession.scheduleUnescalatedD
eadlines(TaskServiceSession.java:231)
[java] at org.jbpm.task.service.TaskServiceSession.scheduleUnescalatedD
eadlines(TaskServiceSession.java:231)
[java] at org.jbpm.task.service.TaskService.initialize(TaskService.java
:116)
[java] at org.jbpm.task.service.TaskService.initialize(TaskService.java
:101)
[java] at org.jbpm.task.service.TaskService.initialize(TaskService.java
:116)
[java] at org.jbpm.task.service.TaskService.<init>(TaskService.java:79)
[java] at org.jbpm.task.service.TaskService.initialize(TaskService.java
:101)
[java] at org.jbpm.DemoTaskService.main(Unknown Source)
[java] at org.jbpm.task.service.TaskService.<init>(TaskService.java:79)
[java] Caused by: javax.persistence.PersistenceException: org.hibernate.exc
eption.JDBCConnectionException: Cannot open connection
[java] at org.jbpm.DemoTaskService.main(Unknown Source)
[java] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceE
xception(AbstractEntityManagerImpl.java:614)
[java] Caused by: org.hibernate.exception.JDBCConnectionException: Cannot o
pen connection
[java] at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:
41)
[java] at org.hibernate.exception.SQLStateConverter.convert(SQLStateCon
verter.java:97)
[java] at org.jbpm.task.service.persistence.TaskLocalTransactionManager
.begin(TaskLocalTransactionManager.java:42)
[java] at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExcep
tionHelper.java:66)
[java] ... 7 more
[java] at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExcep
tionHelper.java:52)
[java] Caused by: org.hibernate.exception.JDBCConnectionException: Cannot o
pen connection
[java] at org.hibernate.jdbc.ConnectionManager.openConnection(Connectio
nManager.java:449)
[java] at org.hibernate.exception.SQLStateConverter.convert(SQLStateCon
verter.java:97)
[java] at org.hibernate.jdbc.ConnectionManager.getConnection(Connection
Manager.java:167)
[java] at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExcep
tionHelper.java:66)
[java] at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:14
2)
[java] at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExcep
tionHelper.java:52)
[java] at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransacti
on.java:85)
[java] at org.hibernate.jdbc.ConnectionManager.openConnection(Connectio
nManager.java:449)
[java] at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.j
ava:1354)
[java] at org.hibernate.jdbc.ConnectionManager.getConnection(Connection
Manager.java:167)
[java] at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:
38)
[java] at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:14
2)
[java] ... 8 more
[java] at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransacti
on.java:85)
[java] Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
Communications link failure
[java] at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.j
ava:1354)
[java]
[java] at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:
38)
[java] The last packet sent successfully to the server was 0 milliseconds a
go. The driver has not received any packets from the server.
[java] ... 8 more
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
[java] Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
Communications link failure
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeC
onstructorAccessorImpl.java:39)
[java]
[java] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Del
egatingConstructorAccessorImpl.java:27)
[java] The last packet sent successfully to the server was 0 milliseconds a
go. The driver has not received any packets from the server.
[java] at java.lang.reflect.Constructor.newInstance(Constructor.java:51
3)
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
[java] at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeC
onstructorAccessorImpl.java:39)
[java] at com.mysql.jdbc.SQLError.createCommunicationsException(SQLErro
r.java:1116)
[java] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Del
egatingConstructorAccessorImpl.java:27)
[java] at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
[java] at java.lang.reflect.Constructor.newInstance(Constructor.java:51
3)
[java] at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java
:2332)
[java] at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
[java] at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImp
l.java:2369)
[java] at com.mysql.jdbc.SQLError.createCommunicationsException(SQLErro
r.java:1116)
[java] at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java
:2153)
[java] at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
[java] at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
[java] at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java
:2332)
[java] at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47
)
[java] at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImp
l.java:2369)
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
[java] at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java
:2153)
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeC
onstructorAccessorImpl.java:39)
[java] at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
[java] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Del
egatingConstructorAccessorImpl.java:27)
[java] at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47
)
[java] at java.lang.reflect.Constructor.newInstance(Constructor.java:51
3)
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
[java] at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
[java] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeC
onstructorAccessorImpl.java:39)
[java] at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java
:381)
[java] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Del
egatingConstructorAccessorImpl.java:27)
[java] at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDri
ver.java:305)
[java] at java.lang.reflect.Constructor.newInstance(Constructor.java:51
3)
[java] at java.sql.DriverManager.getConnection(DriverManager.java:582)
[java] at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
[java] at java.sql.DriverManager.getConnection(DriverManager.java:154)
[java] at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java
:381)
[java] at org.hibernate.connection.DriverManagerConnectionProvider.getC
onnection(DriverManagerConnectionProvider.java:133)
[java] at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDri
ver.java:305)
[java] at org.hibernate.jdbc.ConnectionManager.openConnection(Connectio
nManager.java:446)
[java] at java.sql.DriverManager.getConnection(DriverManager.java:582)
[java] ... 13 more
[java] at java.sql.DriverManager.getConnection(DriverManager.java:154)
[java] Caused by: java.net.UnknownHostException: localhost
[java] at java.net.InetAddress.getAllByName0(InetAddress.java:1157)
[java] at org.hibernate.connection.DriverManagerConnectionProvider.getC
onnection(DriverManagerConnectionProvider.java:133)
[java] at java.net.InetAddress.getAllByName(InetAddress.java:1083)
[java] at org.hibernate.jdbc.ConnectionManager.openConnection(Connectio
nManager.java:446)
[java] at java.net.InetAddress.getAllByName(InetAddress.java:1019)
[java] ... 13 more
[java] at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFa
ctory.java:247)
[java] Caused by: java.net.UnknownHostException: localhost
[java] at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
[java] at java.net.InetAddress.getAllByName0(InetAddress.java:1157)
[java] ... 29 more
[java] at java.net.InetAddress.getAllByName(InetAddress.java:1083)
[java] at java.net.InetAddress.getAllByName(InetAddress.java:1019)
[java] at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFa
ctory.java:247)
[java] at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
[java] ... 29 more
[java] Java Result: 1
start.demo.db:
BUILD SUCCESSFUL
Total time: 11 seconds
D:\jbpm-installer>
--------------------------------------------------------------
Reply to this message by going to Community
[https://community.jboss.org/message/766988#766988]
Start a new discussion in jBPM at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&con...]
11 years, 10 months
[jBPM] - jbpm5.3 - Spring - Manage KSessions
by Pedro Gonçalves
Pedro Gonçalves [https://community.jboss.org/people/pgoncalves] created the discussion
"jbpm5.3 - Spring - Manage KSessions"
To view the discussion, visit: https://community.jboss.org/message/747824#747824
--------------------------------------------------------------
After some research in this forum and my understanding of chapter 5 of the docs, I came to the conclusion that I will need one knowledge session per process instance.
I use jbpm5.3, with spring integration and persistence.
*1* - For what I realized, the spring integration does not allow the "one knowledge session per process instance" architecture that I require. Is that true?
*2* - I've found the possibility of defining the id of the ksession that will be loaded during boot
(...)
<jbpm:ksession id="ksession" type="stateful" kbase="kbase1">
<jbpm:configuration>
<jbpm:jpa-persistence load="1">
<jbpm:transaction-manager ref="transactionManager"/>
<jbpm:entity-manager-factory ref="entityManagerFactory2" />
</jbpm:jpa-persistence>
</jbpm:configuration>
</jbpm:ksession>
(...)
The load parameter allows to load the ksession with the given id, but it fails to do so the first time it boots (as there is no ksession in the DB). So, even if I consider to have only one ksession for all process instances, I will have to implement some workaround to load the app for the first time. It is supposed to be like that? (The goal is to create a config file that does not need to be changed)
--------------------------------------------------------------
Reply to this message by going to Community
[https://community.jboss.org/message/747824#747824]
Start a new discussion in jBPM at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&con...]
11 years, 10 months