It looks like not many people know about this, but Oracle actually has two business rule engines. One is called OBR (Oracle Business Rules) and it is bundled with SOA suite. The other one has less meaningful name OPA (Oracle Policy Automation) and at the first glace serves totally different purpose of generating a nice web questionnaire from a word doc with specs. Fortunately the company that originally developed OPA (RuleRust/Haley) was cleaver about decomposing functionality and Oracle inherited this cleaver design after purchasing Haley.

OPA consists of three parts:
- Determinations Engine – a library you can use in your .net or java program, does all the business logic evaluation
- Web Determinations – the part that runs the web surveys and uses the DE for making decisions
- Determinations Server – that’s the part that wraps the DE and exposes it in the form of a web service. Essentially it does the same thing OBR does.

The way OPA works is
- you write your business rules specs using more-or-less plain english in a word or excel document
- markup your rules with OPA toolbar (part of MS office only, sorry)
- compile your rules using the same OPA toolbar
- build a package containing rules from multiple source using Oracle Policy Modeling – a standalone tool, part of OPA package. Also windows only, also sorry.
- you upload the package to the application server
Since the package contains the DE all your business logic becomes a web service you can consume just like OBR.

This is all cool and in fact OPA works much faster than OBR in 98% of cases, supports bulk processing and overall awesome. But it’s not quite as friendly as OBR in terms of editing the business rules, right? BPM Workspace doesn’t see these rules and you can’t modify the rules in runtime.

I’m working on multiple machines under multiple accounts on the same project and using git to sync between the codebases. The program by its nature has to run under root account, so no wonder at some point permissions got screwed up and I’ve got stuck with this error:
! [remote rejected] master -> master (n/a (unpacker error))

The solution is quite simple though requires access to the master repo: