## 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 ------------------------------`