I'm hoping someone can provide us with some guidance in configuring a system to meet our needs. We have been trudging away at this for several months now and feel that we should have someone who is more familiar with these systems verify that our approach is viable and point us in the right direction if it is not. Additionally, if it is viable, we need some help a few technicalities to get it running.
What we are trying to do:
We are building a back-end system to process files that are provided by a third party. We need the system to be activated on a cron schedule to download the files from the third party and begin processing on them. The system interacts with a MySQL database server behind a DMZ and produces several response files that are uploaded back to the third party. Additionally, the system needs to expose a web service that allows our web site (also on its own, remote server) to interact with it.
The system performs many different processes on the files. These processes need to communicate with one another and be executed in a defined process flow that may change in the future.
The solution we have been trying to implement:
Our approach is to host a JBoss server, using JBoss ESB to facilitate the communication between the processes, and jBPM to orchestrate the order of the processes, sometimes using conditional logic based on the content of the messages being passed between the processes. The specific versions of the software we are using is as follows:
- JBossESB-4.9 (integrated into the JBoss server; not standalone)
- jBPM 5.1.0.Final
- jBPM Console 2.1
- Guvnor 5.2.0.Final
- MySQL 5.5.16
- Eclipse 3.7.1
- Java 1.6 (1.6.0_29)
Instead of using the default Hypersonic database for persistence, we want everything configured to use the MySQL database. We have been able to do this for JBoss/jBPM/ESB, but we ran into some problems trying to convert Guvnor. However, that is something we can tackle after the system is functional.
From a versioning perspective, these were all chosen because they represented, at the time of choosing, the latest stable releases for a Production type of system. There are newer versions of most/all of them, but we want to not be on the bleeding edge or using RC/beta versions. If we determine we need to change to newer versions due to some incompatibility, we can, but we want to be careful about how "new" we get.
The separate "processes" I've been mentioning are currently implemented as Java methods, annotated with @Process. They each accept and return a Message instance.
The problems we are having and questions that we have:
First off, are we approaching this correctly overall?
Is it even possible to have jBPM orchestrate these processes, and if so, can these processes communicate via messages?
Can someone explain the roles that Services and Actions would play in our scenario?
At first we were under the impression that jBPM would be able to orchestrate the Actions within an ESB Service, that is, the jBPM would essentially provide a dynamic Action Pipeline. However, after looking in to how exactly the jBPM would represent or call upon these processes, we could only find documentation suggesting that jBPM could call Services (nothing for Actions). In the former scenario, we would need one Service (e.g. "FileProcessingService") containing one Action for each process/java method, but in the latter scenario, we would need one Service for each process/java method, each containing only one Action for that process/java method. Also in the latter scenario, would the Services be able to communicate with one another via Messages? I know that a Message instance is passed along the Actions in a Service's Action Pipeline, but nothing is ever mentioned about how a Message can be passed between whole Services.
Which file format should be used to represent the business processes, and which designers/versions should be used to create and maintain them?
There appears to be at least 4 file formats to contain business process logic (jpdl, bpel, bpmn, bpmn2), and several different designers (jBPM 3 for Eclipse, jBPM 4 for Eclipse, Oryx for Guvnor) that all seem to be incompatible with one another, allow only limited control through their user interfaces, and seem to be buggy in general. After experimenting with all of them, we have only been able to produce a simple "Hello World" println business process. We could create the files manually in a text editor, but that would practically defeat the purpose of using a BPM to manage the process flows, and even if that weren't the case, the documentation is confusing and seems to be inconsistent or lacking. If anyone is familiar with the differences, pros, and cons of each of these pieces and knows which ones should be used together to provide us with what we need, please give us some advice.
Depending upon the answers to the previous questions, can someone please provide a sample business process descriptor (jpdl, bpel, bpmn, bpmn2, or whichever format should be used) that invokes a Service/Action and passes the returned Message on to another Service/Action (if it can even be done)?
How should the cron schedule be implemented, and how should it invoke a specific business process flow in jBPM?
We have played around with using a Scheduled Listener with a Scheduled Frequency, but it seems that it is only capable of invoking a Service. If this is the case, then we would have a Listener that invokes a Service that invokes the jBPM that invokes the Services (or Actions) needed to process the files. Implementing the cron schedule this way seems overly complex so we weren't sure if there is another more elegant way of doing this. Again, if anyone has a firm understanding of these systems overall, please give us some advice.
If needed, we would be more than happy to provide any additional information. Any help in getting this mess sorted out and working would be greatly appreciated.
Thanks in advance.