Wednesday, October 13, 2010

OPBM and External Activities

I'm currently involved in a project where OBPM 10g is being used in combination with another system providing the user interface.

The idea is that this external system (let's call it system X), polls the engine to find out if there is a task to perform by some logged on user, and if so supports that task as (what is called) an external activity. This polling mechanism would allow you to go from one activity to another where each activity supports one single screen. As a result you are basically modeling a screen flow rather than a business process.

The problem is that you cannot model the screen flow 100%. Think for example about a screen that should provide a pop-up to do some things and then return. There is no (reasonable) way to use OPBM to support this pop-up functionality.

Another problem becomes apparent when you need to call services inside a screen flow. What are the criteria to decide whether OPBM or system X should call the services?

After a couple of weeks and progressive insight, I have come to the conclusion that you should try to prevent modeling a screen flow as a process. So my guideline is to let system X handle the complete screen flow (including the service calls that are specific for that screen flow), in a similar way how you would use a native OBPM screenflow. That really makes life simpler. More over, if you later decide to implement the screen flow in OPBM instead, there is a straight-forward "migration" that won't impact the business process itself.

Monday, May 31, 2010

Some Tips for Installing Oracle BPM 11g on Windows XP

Some tips to get Oracle BPM 11g running on Windows XP, that you may not easily find in the documentation available.

What to collect before you install Software used:
  • Oracle 10g XE Universal
  • Repository Creation Utility 11.1.1.3.0
  • Weblogic 10.3.3 + Coherence - Package Installer
  • SOA Suite 11.1.1.2.0
  • SOA Suite 11.1.1.3.0 (patch on 11.1.1.2.0 with BPM)
  • JDeveloper 11.1.1.3.0

When it is not possible to connect JDeveloper to the internet for a check for update:
  • soa-jdev-extension
  • bpm-jdev-extension

Install the software according to the Quick Installation Guide for Oracle SOA Suite as can be found on the Documentation for Oracle SOA Suite page. On XP I did not need to configure anything out of the ordinary. You can install it in the order listed above. Do a typical install of the SOA Suite in a new Oracle home, e.g. named Oracle_SOA1 (the default). Right after that install the 11.1.1.3.0 patch the same way you installed 11.1.1.2.0.


BPM Domain

Create a domain for the BPM Server, using the config.cmd in the [ORACLE_HOME]\common\bin. On the Select Domain Source tab select:
  • Oracle BPM Suite
  • Oracle SOA Suite
  • Oracle Enterprise Manager
  • Oracle Business Activity Monitoring
  • Oracle WSM Policy Manager
  • Oracle JRF - 11.1.1.0

Call the domain e.g. bpmdomain. Use the Sun JDK, and configure the JDBC Component Schema according to the schemas created by the Repository Creation Utility.

On the Select Optional Configuration screen you now have the option to select a single server or managed server configuration. Due to restrictions in the way XP uses memory, choose the latter by NOT checking anything and just press Next. This will result in a separate admin and BPM server.

Once finished, locate the setSOADomainEnv.cmd file e.g. in the [ORACLE_HOME]\user_projects\domains\bpmdomain\bin\ folder. Change the memory settings as follows:

set DEFAULT_MEM_ARGS=-Xms512m -Xmx768m

I could not get it running with -Xmx1024. Do not set -Xms512m to 768, as that will result in both servers taking a minimum of 768 Mb, and also a significant longer start-up time.


JDeveloper

In JDeveloper create an application server connection to the admin server, pointing to the bpmdomain (in my case), and test the connection. All 9 tests should succeed.

To prevent a 502 error while deploying without any further information about what is going wrong, make sure you disabled the proxy settings in JDeveloper.

Wednesday, May 12, 2010

BPM 11g Generally Available

You may already have noticed that BPM 11g is generally available. As BPM 11g runs on the SOA Suite, it would not be correct to call it the "BPM Suite" anymore. As a matter of fact, BPM 11g currently is only available as a patch on the SOA 11g Suite.

To run BPM 11g on your laptop you will need the following:
  • Oracle Server (to setup a playground environment Oracle Server 10g XE is good enough)
  • Weblogic Server 10.3.3 (unless you need it for something else, without OEPE)
  • Repository Creation Utility 11.1.1.3.0
  • SOA Suite 11.1.1.2.0 (SOA Suite 11g)
  • SOA Suite 11.1.1.3.0 (which includes BPM and is a "patch" on 11.1.1.2.0)
  • JDeveloper 11.1.1.3.0
  • JDeveloper extensions for SOA and BPM (via the check for update feature of JDev)
Excluding the database, for Windows that is 769 MB + 254 MB + 1.7 GB + 1.9 GB + 1.2 GB + 262 MB, is uh ... only 6 GB! Goodbye "next-next-finish", and hello download managers!

The good news is that for the same money you also get all the rest of JDeveloper and also BPEL with that!

Thursday, April 29, 2010

BPM & Use Cases, Who's Counting? Revisited

Whenever I have questions about use cases myself, I grab my use case bible which is Writing Effective Use Cases from Alistair Cockburn. One of the sections in that book is named Your Use Case Is Not My Use Case, which discusses that different people writing use cases for different purposes or audiences, may write use cases differently. This posting I also could have named My Use Case Is Not My Use Case, at least not at Different Points in Time, as you will soon find out.

In one of my earlier postings called BPM & Use Cases, Who's Counting? I discuss an example and suggest that some automatic notification activity is part of the preceding interactive activity. Then in a total different context I noticed myself arguing to a colleague that a notification in her use case model was a use case of its own. It then realized that in general this is a better approach.

The following example will show why:


Assuming that the Customer is not a direct user of your system, for the Notify Customer activity you could argue that it would be part of the goal of the Account Manager to notify the customer. But for the Notify Warehouse I find it way more intuitive to claim that it is a goal of the Shipping Clerk to be notified that there is work to do. But that would imply that the first notification would be part of the Review Order use case, while the second notification would be a use case of it's own. Does that sound inconsistent or what?

So I therefore want to change my opinion and suggest that in principle you should consider a notification activity to be a use case of its own, having the one being notified as primary actor (i.e. having the goal). Make sense, not?

Wednesday, February 24, 2010

Why in Oracle BPM Automatic Activities Belong to the Automatic Role (at least one of the reasons)

Strictly speaking, an automated activity does not have a human actor as role involved, and from that perspective the automated one does not belong in the swim-lane of that role, but in the one of the "automatic" role instead.

You may say that this is smells like over-designing the thing, and moreover it takes extra space, so rather not.

But there also is a practical edge to this. I happened to notice that there are certain circumstances in which automatic activity can actually show up in the workspace of people having that role. That can happen when the automatic activity takes some time to complete, and (if memory serves me well) I also saw this sometimes happening with timers. Very confusing for the user, because it looks like he or she has something to do, while the workspace does not allow doing so.

I therefore recommend always to put automatic activities in the "automatic" role, at least once you start implementing the process. The obvious exceptions being automatic activities inside a screen-flow.

How to Recognize the Requirements in Use Cases?

One of the core values of using a method is that it provides a common "language". That holds for all kind of methods, including those for software engineering. It for example helps when everybody has a same understanding of what a "use case" is. It also helps to have a common format for use cases. Similar to the agreement that (at least in the western culture) we write from left to right, top to bottom, contents at the beginning, index at the end. As is the case with a book, you will appreciate that a common format for use cases not only helps those writing them, but especially those reading them (business as well as IT people).

Next I will discuss a format that I have learned to appreciate very much, and can recommend to everyone who is writing use cases.

If you have not already decided upon a common format, or when you have the opportunity to do so, you may consider writing use cases in a two column format. I learned this technique more than a year ago from a great guy called Vince Bordo (hi Vince!). I practice this technique since then, as I find it to be more effective than what I used to do (i.e. a one-column format).

In practice this looks as in the following example, which is a reformatted version of a use case I used in some previous posting:


The beauty of this format is that it visually depicts what the system needs to do in order to satisfy the requirements, as that is exactly what the right column is about. The left column describes how actors (primary as well as secondary) interact with the system in order to satisfy the goal of the use case.

In theory (I would not try this in practice, but in theory) you should be able to cut out the right hand column of the use case and only hand that over to the developeras and tell them that this is what they need to realize. That, plus the supplemental requirements of course.