> ## 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 failes. 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 ------------------------------

Copyright © 1991-2003 Ericsson Utvecklings AB