5 Resource Skeletons

5.1  Resource Skeletons

This chapter provides a skeleton for application Resources. For more information see the Orber documentation.

%%%-----------------------------------------------------------
%%% File    : Module_Interface_impl.erl
%%% Author  : 
%%% Purpose : 
%%% Created : 
%%%-----------------------------------------------------------
 
-module('Module_Interface_impl').
 
%%--------------- INCLUDES -----------------------------------
-include_lib("orber/include/corba.hrl").
-include_lib("cosTransactions/include/CosTransactions.hrl").

%%--------------- EXPORTS-------------------------------------
%%- Inherit from CosTransactions::Resource -------------------
-export([prepare/2, 
         rollback/2, 
         commit/2, 
         commit_one_phase/2, 
         forget/2]).

%%- Inherit from CosTransactions::SubtransactionAwareResource 
-export([commit_subtransaction/3,
         rollback_subtransaction/2]).
 
%%--------------- gen_server specific ------------------------
-export([init/1, terminate/2, code_change/3, handle_info/2]).
 
%%------------------------------------------------------------
%% function : gen_server specific
%%------------------------------------------------------------
init(Env) ->
    %% 'trap_exit' optional
    process_flag(trap_exit,true),

    %%--- Possible replies ---
    %% Reply and await next request
    {ok, State}.

    %% Reply and if no more requests within Time the special 
    %% timeout message should be handled in the 
    %% Module_Interface_impl:handle_info/2 call-back function (use the 
    %% IC option {{handle_info, "Module::Interface"}, true}).
    {ok, State, TimeOut}.

     %% Return ignore in order to inform the parent, especially if it is a 
     %% supervisor, that the server, as an example, did not start in 
     %% accordance with the configuration data. 
     ignore.

     %% If the initializing procedure fails, the reason 
     %% is supplied as StopReason.
     {stop, StopReason}.


terminate(Reason, State) ->
    ok.

code_change(OldVsn, State, Extra) ->
    {ok, NewState}.

%% If use IC option {{handle_info, "Module::Interface"}, true}
handle_info(Info, State) ->
     %%--- Possible replies ---
     %% Await the next invocation.
     {noreply, State}.
     %% Stop with Reason.
     {stop, Reason, State}.

 
%%- Inherit from CosTransactions::Resource -------------------
prepare(State) ->

    %%% Do application specific actions here %%%

    %%-- Reply: --
    %% If no data related to the transaction changed.
    {reply, 'VoteReadOnly', State}
    %% .. or (for example): 
    {stop, normal, 'VoteReadOnly', State}.

    %% If able to commit
    {reply, 'VoteCommit', State}

    %% If not able to commit
    {reply, 'VoteRollback', State}
    %% .. or (for example): 
    {stop, normal, 'VoteRollback', State}.

rollback(State) ->

    %%% Do application specific actions here %%%

    %%-- Reply: --
    %% If able to rollback successfully
    {reply, ok, State}
    %% .. or (for example): 
    {stop, normal, ok, State}.

    %% If Heuristic Decision. Raise exception:
    corba:raise(#'CosTransactions_HeuristicMixed' {})
    corba:raise(#'CosTransactions_HeuristicHazard' {})
    corba:raise(#'CosTransactions_HeuristicCommit'{})


commit(State) ->

    %%% Do application specific actions here %%%

    %%-- Reply: --
    %% If able to commit successfully
    {reply, ok, State}
    %% .. or (for example): 
    {stop, normal, ok, State}.

    %% If the prepare operation never been invoked:
    corba:raise(#'CosTransactions_NotPrepared'{})

    %% If Heuristic Decision. Raise exception:
    corba:raise(#'CosTransactions_HeuristicMixed' {})
    corba:raise(#'CosTransactions_HeuristicHazard' {})
    corba:raise(#'CosTransactions_HeuristicRollback'{})

 
commit_one_phase(State) ->

    %%% Do application specific actions here %%%

    %%-- Reply: --
    %% If able to commit successfully
    {reply, ok, State}
    %% .. or (for example): 
    {stop, normal, ok, State}.

    %% If fails. Raise exception:
    corba:raise(#'CosTransactions_HeuristicHazard' {})

    %% If able to rollback successfully
    corba:raise(#'CosTransactions_TransactionRolledBack' {})

 
forget(State) ->

    %%% Do application specific actions here %%%

    %%-- Reply: --
    {reply, ok, State}.
    %% .. or (for example): 
    {stop, normal, ok, State}.
  


%%%%%% If the Resource is also supposed to be a     %%%%%%
%%%%%% SubtransactionAwareResource implement these. %%%%%%

%%- Inherit from CosTransactions::SubtransactionAwareResource
commit_subtransaction(State, Parent) ->
    %%% Do application specific actions here %%%

    %%-- Reply: --
    {reply, ok, State}.
    %% .. or (for example): 
    {stop, normal, ok, State}.

rollback_subtransaction(State) ->
    %%% Do application specific actions here %%%

    %%-- Reply: --
    {reply, ok, State}.
    %% .. or (for example): 
    {stop, normal, ok, State}.
 
%%--------------- END OF MODULE ------------------------------