%%-------------------------------------------------------------------- %% %% %CopyrightBegin% %% %% Copyright Ericsson AB 1997-2009. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. %% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. %% %% %CopyrightEnd% %% %% %%----------------------------------------------------------------- %% File: corba_boa.erl %% %% Description: %% This file contains the CORBA::BOA interface %% %%----------------------------------------------------------------- -module(corba_boa). -include_lib("orber/include/corba.hrl"). -include_lib("orber/include/ifr_types.hrl"). %%----------------------------------------------------------------- %% External exports %%----------------------------------------------------------------- -export([%create/3, dispose/1, get_id/1]). % change_implementation/2, % set_exception/3, % impl_is_ready/1, % deactivate_impl/1, % obj_is_ready/2, % deactivate_obj/1, % get_principal/2]). %%----------------------------------------------------------------- %% Internal exports %%----------------------------------------------------------------- -export([]). %%----------------------------------------------------------------- %% Macros %%----------------------------------------------------------------- -define(DEBUG_LEVEL, 5). %%----------------------------------------------------------------- %% External functions %%----------------------------------------------------------------- %create(Id, Interface, Implementation) -> % corba:create(Implementation#orb_ImplDef.module, % Interface#fullinterfacedescription.id). dispose(Object) -> case binary_to_term(iop_ior:get_privfield(Object)) of undefined -> case catch iop_ior:get_key(Object) of {'internal', Key, _, _, _} -> case orber_objectkeys:get_pid(Key) of {error, Reason} -> orber:dbg("[~p] corba_boa:dispose(~p); object not found(~p)", [?LINE, Object, Reason], ?DEBUG_LEVEL), corba:raise(#'TRANSIENT'{completion_status=?COMPLETED_NO}); Pid -> gen_server:call(Pid, stop) end; {'internal_registered', Key, _, _, _} -> case Key of {pseudo, Module} -> Module:terminate(normal, undefined), ok; _ -> case whereis(Key) of undefined -> corba:raise(#'OBJECT_NOT_EXIST'{completion_status=?COMPLETED_NO}); Pid -> gen_server:call(Pid, stop) end end; {'external', _} -> orber:dbg("[~p] corba_boa:dispose(~p); external object.", [?LINE, Object], ?DEBUG_LEVEL), %% Must be fixed !!!!!!!! corba:raise(#'NO_IMPLEMENT'{completion_status=?COMPLETED_NO}) end; Other -> case iop_ior:get_key(Object) of {_, {pseudo, Module}, _, _, _} -> Module:terminate(normal, Other), ok; Why -> orber:dbg("[~p] corba_boa:dispose(~p); probably subobject key set(~p)", [?LINE, Object, Why], ?DEBUG_LEVEL), corba:raise(#'NO_PERMISSION'{completion_status=?COMPLETED_NO}) end end. get_id(Object) -> iop_ior:get_objkey(Object). %change_implementation(Object, ImplementationDef) -> % ok. %get_principal(Object, Env) -> % ok. %set_exception(Major, Id, Param) -> % ok. %impl_is_ready(ImplementationDef) -> % ok. %deactivate_impl(ImplementationDef) -> % ok. %obj_is_ready(Object, ImplementationDef) -> % ok. %deactivate_obj(Object) -> % ok. %%----------------------------------------------------------------- %% Internal functions %%-----------------------------------------------------------------