I'm working on a large application with Oracle BPM 18.104.22.168.0.
I'm using JDeveoper 22.214.171.124.0 to build the application.
The application has lots of user tasks with lots of UI projects (one for each user task).
My problem is, each time I make a small change in the project, I have to deploy the whole thing, which includes one main project and five or six UI projects (for now) for the user tasks.
As the application gets bigger I'm sure this will definitely become an issue.
So my question is if I'm doing this the right way? or should there be a more efficient way?
1. Generally, there is NO need to have One UI Project for one individual Task. Say you have like 10 Tasks (.task files) like Initiator, Approver, Reviewer, LegalApprover etc etc. You can have just One UI TaskForms Project and have taskDetails.jspx generated for each one of these Tasks. This is the preferred way.
2. Any Workflow Application should have just 2 deployers. Means one deploy is for actual Workflow stuff that will have the main BPEL or BPM Process, human Tasks etc etc. Basically all that goes into workflow project. And another deployer is the REST of the things means the TaskForms UI Project and any other supporting projects like EJB projects, utils projects, any WebServices projects (if you have WebServices). All these will be deployed as one SINGLE EAR.
Lets take an Example from JDeveloper IDE point of view.
1. Application Name: SalesOrderApp
2. Workflow Project Name: SalesProcess (This is a a jdeveloper project of type BPM Project or SOA Project and has all human tasks, bpels, bpm process, business rules etc etc).
3. UI Project: SalesTaskForms (This is a auto generated form for the very first Task that you choose. Then for rest of the Tasks use this same Project, to generate jspx for all other .TASK files. REFER online docs on how to do this. I will see if I can compile this list of urls for you).
3. Supporting EJB Projects: MyEJBProject1 (Some EJB Project that connects to some backend database specific to your project)
4. Supporting another EJB Service Project: MyExtServiceProject1 (Like another EJB Project, that pulls data from some external source)
5. Some WebService Project: SalesCreditCardValidationWebService (Some WebService Project to be deployed as .WAR file that does some service).
Try to apply SOA Concepts for each Service that your application needs. Instead of putting all the EJBs and everying in one single giant project, try to split them logically/business need wise and geenrate separate projects so that they can service as it is to other projects and other apps.
Anyhow, coming back, in above Example, you should have jsut 2 Deployement: 1 is Workflow SCA JAR File and other is full EAR file.
a) For the Workflow Project, right click and generate a Deployment profile to deploy just this workflow and NOT any other UI Projects.
b) For each individual project genereate a deployment profile like MyEJBProj1, MyEJBProj2, MyWebService1 etc etc.
c) For TaskForms project also, generate a deployment profile like SalesTaskForms. This will be a WAR file.
d) At Application Level, create a new Deployment profile of type EAR and now assemble all the projects under this EAR except for the Workflow project.
First you deploy Workflow SCA JAR file. You need to redeploy this again only when you make changes to workflow, humantasks etc etc.
Deploy full blown EAR file that has all the stuff (EJB JARs, TaskForm WARs, WebService WARs etc).
Anytime you change taskforms, or any java or ejb code, ReDeploy EAR file.
You should have one JAR and one EAR to deploy at the end of the day. Infact this is how it should go into UAT and Production. They should not have multiple JARs, multiple WARs to deploy. The reason we have separate Workflow SCA Jar file is, bcos workflow will not change frequenly. And also older versions of SOA/BPM (before 11.5 FP) have a huge disadvantage. Everytime we deploy workflow project, it will make all existing process STALE unless you deploy with a diff version. This is not an issue any more for 11.5 + FP (Feature Pack applied). Hence be careful when you redeploy workflow project.
Thank you Ravi
It'll take me a while to be able to apply all that in a clean way but it'll be worth it I'm sure.
I've already started using only one UI project for the whole application and the size of the application has reduced to half already, not to mention the deployment time, which is far less. :)
Thank you very much
You can simply create an ADF ViewController project. Then inside this project go to New and then select Task flow based on Human task. This will generate the required task flow and data controls into your View project. You can do this for as many human tasks as you need to.
Once the task flow is created you will still need to create the JSF (jspx) page. To put any of the human task data on that page simply drag the Task element from the data control onto the page and then select from the Human Task menu.