BPEL Engine Tables

-- Scripts table, keeps one record per version
create table BPEL.BPEL.script (
        bs_id integer identity,         -- unique id identifying the process
        bs_uri varchar,                 -- obsoleted: script source URI
        bs_name varchar,                -- process name, all versions have same name
        bs_state int,                   -- 0 on, current version, 1 obsolete, 2 edit mode
        bs_date datetime,               -- date of registration
        bs_audit int default 0,         -- audit flag : 1 on, 0 off
        bs_debug int default 0,         -- debug flag
        bs_version int default 0,       -- process version
        bs_parent_id int default null,  -- fk to bs_id of previous process version
        bs_first_node_id int,           -- the first node id in the graph
        bs_pickup_bf varbinary default '\x0',   -- bitmask for resume nodes
        bs_act_num      int,            -- stores the total number of activities
        bs_lpath        varchar default null, -- virtual directory

        -- process statistics
        bs_n_completed int default 0,
        bs_n_errors int default 0,
        bs_n_create int default 0,
        bs_cum_wait int default 0,
        primary key (bs_id));

-- BPEL and WSDL sources
create table BPEL..script_source
        (
         bsrc_script_id int, -- script id, fk to bs_id of scripts table.
         bsrc_role varchar,  -- one of bpel, bpel-ext, wsdl, deploy, partner-1... partner-n
         bsrc_text long xml, -- source text
         bsrc_url varchar,   -- if this comes from an uri
         bsrc_temp varchar,  -- contains the namespaces info
         primary key (bsrc_script_id, bsrc_role)
)
;

-- Process instances
create table BPEL.BPEL.instance (
        bi_id int identity,             -- global immutable id of instance
        bi_script int,                  -- fk to bs_id from BPEL.BPEL.script
        bi_scope_no int default 0,      -- sequence counter for scope numbers in instance
        bi_state int default 0,
                -- 0, started
                -- 1, suspended (wait for signal)
                -- 2, finished
                -- 3, aborted
        bi_error any,                   -- error
        bi_lerror_handled int,
        bi_last_act     datetime,       -- last activity execution
        bi_started      datetime,       -- start time
        bi_init_oper    varchar,        -- operation that made the instance
        bi_wsa          long xml,       -- WS-Addressing headers
        bi_activities_bf varbinary default '\x0\x0', -- bitmask for each activity is completed or not
        bi_link_status_bf varbinary default '\x0\x0', -- bitmask for link status
        bi_prefix_info varchar default '', -- xpath prefix string
        primary key (bi_id));

-- Initial values (URL etc.) for partner links
create table BPEL.BPEL.partner_link_init (
        bpl_script int,         -- script instance id
        bpl_name varchar,       -- partner link name
        bpl_partner any,        -- url, end point etc serialized
        bpl_role varchar,
        bpl_myrole varchar,
        bpl_type varchar,
        bpl_endpoint varchar,   -- partner service endpoint URL
        bpl_backup_endpoint varchar,
        bpl_wsdl_uri varchar,
        bpl_debug int default 0,-- debug flag
        bpl_opts long xml,      -- partner link options (WS-Security, WS-RM etc.)
        primary key (bpl_script,bpl_name));

-- Runtime values for partner links (run time copy of partner_link_init table)
create table BPEL..partner_link (
        pl_inst int,            -- instance id
        pl_name varchar,        -- partner link name
        pl_scope_inst int,      -- scope instance id
        pl_role int,            -- flag 0 - myRole, 1 - partnerRole
        pl_endpoint varchar,    -- current URL to the partner service
        pl_backup_endpoint varchar, -- second URL to the service for connection error
        pl_debug int default 0, -- debug flag
        pl_opts long xml,       -- partner link options (WS-Security, WS-RM etc.)
        primary key (pl_inst, pl_name, pl_scope_inst, pl_role));

-- Script compilation
create table BPEL.BPEL.graph (
        bg_script_id int,       -- FK to bs_id of BPEL.BPEL.script
        bg_node_id int ,        -- running id in the script, referenced from BPEL.BPEL.waits etc.
        bg_activity BPEL.BPEL.activity, -- UDT representing activity
        bg_childs any,
        bg_parent int,
        bg_src_id varchar,      -- internal use
        primary key (bg_script_id, bg_node_id));

-- Receive activities waiting for incoming message
create table BPEL.BPEL.wait (
        bw_uid varchar,
        bw_instance integer,  -- instance id
        bw_script varchar,    -- FK reference to bs_name of script table
        bw_script_id int,     -- FK reference to bs_id of script table
        bw_node int,          -- FK reference to bg_node_id of the graph table
        bw_scope  int,
        bw_partner_link varchar, -- the party from which instance waiting a message
        bw_port varchar,         -- the name of the operation which instance wait to receive
        bw_deadline datetime,
        bw_message long varchar default null, -- if instance is occupied and message is already arrived
        bw_state int default 0,               -- flag that bw_message is not null (0 or 1)
        bw_correlation_exp varchar,           -- XPath expression for computing the correlation value from message
        bw_expected_value long varbinary,     -- value of the expected correlation
        bw_message_type int default 0,        -- where to expect the data : 0 - SOAP:Body 1 - SOAP:Header
        bw_start_date datetime,
        primary key (bw_instance, bw_node));

-- Messages which have been arrived but not correlated yet
create table BPEL.BPEL.queue (
        bq_id int identity,     -- unique id
        bq_script int,          -- FK references bs_id from the script table
        bq_ts timestamp,
        bq_state int,           -- state of the Queue item; 0 - not processed
        bq_endpoint varchar,    -- not used
        bq_op varchar,          -- Operation name
        bq_mid varchar,         -- mot used
        bq_message long varchar, -- The incoming message text
        bq_header long varchar,  -- SOAP:Header
        primary key (bq_op, bq_ts)
        );

-- Initial values for SOAP Messages and XMLSchema types
create table BPEL..types_init (
        vi_script int,     -- FK reference to bs_id to the script table
        vi_name   varchar, -- message name, element name etc.
        vi_type   int,     -- 0 - message, 1 - element, 2 - XMLSchema type
        vi_value  long xml,-- Initial value
        primary key (vi_script, vi_name, vi_type)
)
;

-- Matching XPath expressions for the SOAP message parts
create table BPEL.BPEL.message_parts
        (
        mp_script int,      -- FK reference to bs_id to the script table
        mp_message varchar, -- message name
        mp_part varchar,    -- part name
        mp_xp   varchar,    -- location XPath expression
        primary key (mp_script, mp_message, mp_part)
        )
;

-- Operations which are invoked by process (used in invoke activities)
create table BPEL.BPEL.remote_operation (
        ro_script int,          -- FK reference to bs_id to the script table
        ro_partner_link varchar,-- name of the partner link
        ro_role varchar,        -- not used
        ro_operation varchar,   -- operation name
        ro_port_type varchar,   -- port type
        ro_input varchar,       -- input message name
        ro_output varchar,      -- output message name
        ro_endpoint_uri varchar,-- not used
        ro_style int,           -- messages encoding style : 1 - literal, 0 - RPC like
        ro_action varchar default '', -- SOAP Action value
        ro_target_namespace varchar,  -- for RPC encoding the namespace to be used for wrapper elements
        ro_use_wsa int default 0, -- WS-Addressing capabilities flag
        ro_reply_service varchar, -- for one-way operations: reply service name
        ro_reply_port varchar,    -- for one-way operations: reply port type
        primary key (ro_script, ro_partner_link, ro_operation)
)
;

-- Operations which process defines (can receive and reply)
create table BPEL.BPEL.operation (
        bo_script int,          -- FK reference to bs_id to the script table
        bo_name varchar,        -- operation name
        bo_action varchar,      -- SOAP Action value
        bo_port_type    varchar,-- port type
        bo_partner_link varchar,-- name of the partner link
        bo_input        varchar,-- input message name
        bo_input_xp     varchar,-- XPath expression to match the input message
        bo_small_input  varchar,-- not used
        bo_output       varchar,-- output message name
        bo_style        int default 0,-- messages encoding style : 1 - literal, 0 - RPC like
        bo_init         int,    -- process instantiation flag: 1 - can make new instances
        primary key (bo_script, bo_name, bo_partner_link)
);

-- Predefined endpoint URLs for partner links
create table BPEL.BPEL.partner_link_conf (
        plc_name        varchar,
        plc_endpoint    varchar,
        primary key (plc_name)
)
;

-- Properties
create table BPEL.BPEL.property
(
  bpr_script int,       -- FK reference to bs_id to the script table
  bpr_name varchar,     -- property name
  bpr_type varchar,     -- property type
  primary key (bpr_script, bpr_name)
)
;

-- Aliases
create table BPEL.BPEL.property_alias (
        pa_script       int,            -- FK reference to bs_id to the script table
        pa_prop_id      int identity,
        pa_prop_name    varchar,        -- property name
        pa_message      varchar,        -- message name
        pa_part         varchar,        -- part name
        pa_query        varchar,        -- XPath query to set the property value
        pa_type         varchar,
        primary key (pa_script, pa_prop_name, pa_message))
;

-- Correlation properties
create table BPEL.BPEL.correlation_props (
        cpp_id          int identity (start with 1),
        cpp_script      int,            -- FK reference to bs_id to the script table
        cpp_corr        varchar,        -- correlation name
        cpp_prop_name   varchar,        -- property name
        primary key (cpp_id, cpp_script, cpp_corr, cpp_prop_name))
;

-- Variables
create table BPEL..variables (
        v_inst          int,            -- instance id, FK reference bi_id of the instance table
        v_scope_inst    int,            -- scope instance id; different than 0 for compensation scope
        v_name          varchar,        -- variable name
        v_type          varchar,        -- variable type
        v_s1_value      any,            -- string, numeric
        v_s2_value      varchar,        -- XML entities
        v_b1_value      long varchar,   -- long strings
        v_b2_value      long varchar,   -- XML entities
        primary key (v_inst, v_scope_inst, v_name))
;

-- Links
create table BPEL..links
        (
          bl_script int,        -- FK reference to bs_id to the script table
          bl_name   varchar,    -- link name
          bl_act_id int,        -- corresponding link activity bit number
          primary key (bl_act_id, bl_script)
        )
;

-- Compensation scopes
create table BPEL..compensation_scope
        (tc_inst int,
         tc_seq  int identity (start with 1),
         tc_scopes long varbinary,
         tc_head_node int,
         tc_head_node_bit int,
         tc_compensating_from int default null,
         primary key (tc_inst, tc_seq)
        )
;

-- Messages are correlated via WS-Addressing
create table BPEL..wsa_messages
        (
        wa_inst int,
        wa_pl   varchar,
        wa_mid  varchar,
        primary key (wa_inst, wa_pl, wa_mid)
        )
;

create table BPEL..lock
        (
        lck int primary key
        )
;

-- Accepted connections which are waiting for reply
create table BPEL..reply_wait
        (
        rw_inst int,
        rw_id int, -- identity (start with 1),
        rw_partner varchar,
        rw_port varchar,
        rw_operation varchar,
        rw_query varchar,
        rw_expect varchar,
        rw_started datetime,
        primary key (rw_inst, rw_id)
        )
;

-- Registered alarm events
create table BPEL..time_wait
        (
          tw_inst       int,
          tw_node       int,
          tw_scope_inst int,
          tw_script     varchar,
          tw_script_id  int,
          tw_sec        int,
          tw_until      datetime,
          primary key (tw_inst, tw_node)
        )
;

-- BPEL message debugging queue
create table BPEL..dbg_message (
        bdm_text long varchar,          -- message text
        bdm_id int identity (start with 1),
        bdm_ts datetime,
        bdm_inout int,                  -- 1 for in, 0 for out
        bdm_sender_inst int,            -- instance id of sender if outbound message
        bdm_receiver int,               -- if inbound, inst id of receiving inst
        bdm_plink varchar,              -- name of partner link in the script in question
        bdm_recipient varchar,          -- partner link value for outbound message, URL.
        bdm_activity int,               -- activity id of activity that either sent the message or would receive the message in the sender/receiver instance.
        bdm_oper varchar,               -- operation name
        bdm_script int,                 -- process id, FK reference bs_id from script table
        bdm_action varchar,             -- SOAP Action value
        bdm_conn int,                   -- client connection id
        primary key (bdm_id)
)
;

-- BPEL engine configuration
create table BPEL..configuration (
        conf_name       varchar not null,
        conf_desc       varchar,
        conf_value      any, -- not blob
        conf_long_value long varchar,
        primary key (conf_name)
)
;

create table BPEL.BPEL.op_stat
        (
         bos_process int,
         bos_plink varchar,
         bos_op varchar,
         bos_n_invokes int default 0,
         bos_n_receives int default 0,
         bos_cum_wait numeric default 0, -- milliseconds total time wait at the partner link/operation
         bos_data_in numeric default 0,
         bos_data_out numeric default 0,
         bos_n_errors int default 0,
         primary key (bos_process, bos_plink, bos_op)
)
;

create table BPEL.BPEL.error_log
        (
         bel_ts timestamp,
         bel_seq int identity,
         bel_level int, -- bel_level is 1. fatal 2. network, 3 instance.
         bel_notice_sent datetime,  -- time the email was sent, null if none
         bel_text varchar,
         primary key (bel_ts, bel_seq)
)
;

create table BPEL.BPEL.hosted_classes
        (
         hc_script      int,
         hc_type        varchar default 'java',
         hc_name        varchar,
         hc_text        long varbinary, -- compiled class
         hc_path        varchar, -- path to class if it is stored in file system
         hc_load_method varchar,
         primary key (hc_script, hc_type,  hc_name)
)
;