4. Three reasons to shake the dust off
"Studies have shown that software specialists spend
about 40 to 50 percent of their time on avoidable
rework rather than on what they call value-added
work, which is basically work that's done right the first
time..." - Robert Charette, IEEE Spectrum, Sept. 2005
CAUTION !
INTEGRATION
AHEAD
1.SOA is dead (again).
2.SOA is the advanced
(or more expensive) form of
integration
3. Recent project (disclaimer !)
In 2001, Larry Ellison announced the following:
Oracle saved $1 billion by implementing and using
its own business applications.
"It's like if you want to buy a car. Would you get an engine
from BMW, a chassis from Jaguar, windshield wipers from
Ford? No, of course not. Right now with the software that's
out there, you need a glue gun—or hire all these
consultants to put it together. They call it best of breed. I
call it a mess. We want to put an end to that."
2.1
2.2
2.3
5. Requirements for… Integration ?
Employee EBO
QDO1 QDO2
HR ACCOUNTING
Integration – good for the batch operation
SOA – real-time message/object propagationMs1
• No available Interfaces
- No data model
- No MEP
- No protocol
- No policy
• No commonly
recognised Events
• No references to the
Processes
6. Employee Service
Where to start ? Speculating on the building block
Maintain homogeneous technical infrastructureMs2
MDM
Storage
Service Logic
Service
Contract
12
2
1
7. Employee Service
How to understand
negative coupling
MDM
Storage
Service Logic
Service
Contact
TP1 TP2
Employee
message
1
File Poller
TPn
OFM Adapter Framework
App Farm
2
TP Subscriber TP Sender Ms3
Async protocol does not
denote decoupling
Ms4
Mixing delivery technology
do not decouple from core
technology stack
8. MDM
Storage
Employee Service
Service Logic
Service
Contract
3
TP1 TP2 TPn
TP subscribers
App Farm
Publish
4
Polling changes: Direct Changes
5
6
Event Delivery network: Alternative FSO
XSL transform
Accepted Ignored
Ms5
TP subscribers management
denote coupling (or
decentralisation)
11. A1
A2
DWH
MDM
Employee
API
Tables
File
dump
API
Tables
FSO
Boxes
JMS Topic
JMS Topic
Service
Logic
Interchange channel I
Interchange channel II
Adapter Framework
Interchange
channel III
AD/LDAP
User accounts
Interchange
channel IV
Adapter Framework
Event Delivery
Framework (and CDC)
CDCCDC
Legend
SRC Target
Target
Target
Target
Service at consistent
state(source mode)
Creeping… The Common model will be implemented in
the Oracle middle layerMs6
Non-invasive
Invasive
12. A2
A1
MDM
Employee
API
Tables
File
dumpAPI
Tables
FSO
Boxes
DB Adapter
Service
Logic
Interchange channel I
Interchange channel II
Adapter Framework
Interchange
channel III
Adapter Framework
Event Delivery
Framework (and CDC)
CDCCDC
Legend
ESR
Target
Source
Service at consistent
state(source mode)
FSO Adapter
FSO Adapter
DB AdaptersI* File
dump
FSO
Boxes
Adapter Framework
SELECT * FROM old_version
MINUS SELECT * FROM
new_version;
• it requires that the new version of the entire table be transported to the staging database, not just the change data, thereby
greatly increasing transport costs.
• The computational cost of performing the two MINUS operations on the staging database can be very high.
• Table differencing cannot capture data that have reverted to their old values.
• There is no way to determine which changes were made as part of the same transaction.
CDC Implementation options: ESR Role
15. ContractPersonCompanyPayroll
A1 A2
ABO1 ABO2
List of all
supported events
per domain:
Person.hired
Peson.retired
Payroll.salary.raised
Payroll.account.change
d
EBO
Message Guide
EBO XSD
Message
Implementation
Guide (MIG)
MIG: Process1
MIG: Process2
MIG: Process3
MIG: ProcessN
16. ContractPersonCompanyPayroll
A1 A2
ABO1 ABO2
List of all
supported events
per domain:
Person.hired
Peson.retired
Payroll.salary.raised
Payroll.account.changed
List of all fields
required per
events
EBO
List of all
supported
elements:
Strong
relevance to
existing public
standards
DB Schema DDL
23. Takeout 3: NDS(IoC) Rule Engine
23
query_str := 'SELECT ' || oper_in || ' from ' || arg1_in || ' WHERE ' || arg2_in || '= ';
query_str := query_str || ':id ';
OPEN crsr FOR query_str USING arg3_in;
-- OPEN crsr FOR query_str;
LOOP
FETCH crsr INTO retval;
EXIT WHEN crsr%NOTFOUND;
-- process row here
END LOOP;
CLOSE crsr;
RETURN retval;
EXECUTE IMMEDIATE query_str INTO retval USING arg3_in;
IF new_retval IS NULL AND cur_retval IS NULL THEN
c_msgtext := 'Extracted values are NULL and cannot be compared ';
v_compstatus :='undifined';
v_baseoperation :='O';
ELSIF new_retval IS NULL AND cur_retval IS NOT NULL THEN
v_compstatus :='delete';
v_baseoperation :='D';
ELSIF new_retval IS NOT NULL AND cur_retval IS NULL THEN
v_operation := '.create';
v_baseoperation :='I';
ELSIF UPPER(new_retval)= UPPER(cur_retval) THEN
v_compstatus :='no change';
v_baseoperation :='O';
ELSIF (new_retval IS NOT NULL AND cur_retval IS NOT NULL) AND (UPPER(new_retval)<> UPPER(cur_retval)) THEN
v_compstatus :='.update';
v_baseoperation :='U';
END IF;