diff options
Diffstat (limited to 'lib/ic/examples/pre_post_condition')
-rw-r--r-- | lib/ic/examples/pre_post_condition/Makefile | 128 | ||||
-rw-r--r-- | lib/ic/examples/pre_post_condition/ReadMe.txt | 73 | ||||
-rw-r--r-- | lib/ic/examples/pre_post_condition/ex.idl | 29 | ||||
-rw-r--r-- | lib/ic/examples/pre_post_condition/m_i_impl.erl | 49 | ||||
-rw-r--r-- | lib/ic/examples/pre_post_condition/tracer.erl | 56 |
5 files changed, 335 insertions, 0 deletions
diff --git a/lib/ic/examples/pre_post_condition/Makefile b/lib/ic/examples/pre_post_condition/Makefile new file mode 100644 index 0000000000..68e2168e1e --- /dev/null +++ b/lib/ic/examples/pre_post_condition/Makefile @@ -0,0 +1,128 @@ +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 1999-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% +# +# +# ``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 via the world wide web 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. +# +# The Initial Developer of the Original Code is Ericsson Utvecklings AB. +# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings +# AB. All Rights Reserved.'' +# +# $Id$ +# +include $(ERL_TOP)/make/target.mk + +EBIN= ./ + +include $(ERL_TOP)/make/$(TARGET)/otp.mk + +# ---------------------------------------------------- +# Application version +# ---------------------------------------------------- +include ../../vsn.mk +VSN=$(IC_VSN) + +# ---------------------------------------------------- +# Release directory specification +# ---------------------------------------------------- +RELSYSDIR = $(RELEASE_PATH)/lib/ic-$(VSN) + +# ---------------------------------------------------- +# Target Specs +# ---------------------------------------------------- + +IDL_FILES = \ + ex.idl + +GEN_ERL_MODULES = \ + oe_ex \ + m_i \ + m_NotAnInteger + +MODULES= \ + m_i_impl \ + tracer + +GEN_HRL_FILES = \ + oe_ex.hrl \ + m.hrl \ + m_i.hrl + +HRL_FILES = +TXT_FILES = ReadMe.txt + +ERL_FILES= $(MODULES:%=%.erl) + + +TARGET_FILES = \ + $(GEN_ERL_MODULES:%=$(EBIN)/%.$(EMULATOR)) \ + $(MODULES:%=$(EBIN)/%.$(EMULATOR)) + +# ---------------------------------------------------- +# FLAGS +# ---------------------------------------------------- +ERL_LOCAL_FLAGS += -pa $(ERL_TOP)/lib/orber/ebin -pa $(ERL_TOP)/lib/ic/ebin +# The -pa option is just used temporary until erlc can handle +# includes from other directories than ../include . +ERL_COMPILE_FLAGS += \ + $(ERL_LOCAL_FLAGS) \ + -pa $(ERL_TOP)/lib/orber -I$(ERL_TOP)/lib/orber +YRL_FLAGS = + + +# ---------------------------------------------------- +# Targets +# ---------------------------------------------------- +debug opt: $(TARGET_FILES) + +clean: + rm -f $(TARGET_FILES) $(GEN_ERL_MODULES:%=%.erl) $(GEN_HRL_FILES) $(CLASS_FILES) + rm -f errs core *~ + +docs: + +test: $(TEST_TARGET_FILES) + + +$(GEN_ERL_MODULES:%=%.erl) $(GEN_HRL_FILES): ex.idl + erlc $(ERL_LOCAL_FLAGS) +'{precond,{tracer,pre}}' \ + +'{{postcond,"m::i::f"},{tracer,post}}' ex.idl + +# ---------------------------------------------------- +# Release Target +# ---------------------------------------------------- +include $(ERL_TOP)/make/otp_release_targets.mk + + +release_spec: opt + $(INSTALL_DIR) $(RELSYSDIR)/examples/pre_post_condition + $(INSTALL_DATA) $(ERL_FILES) $(IDL_FILES) $(TXT_FILES) $(RELSYSDIR)/examples/pre_post_condition + + +release_docs_spec: + + diff --git a/lib/ic/examples/pre_post_condition/ReadMe.txt b/lib/ic/examples/pre_post_condition/ReadMe.txt new file mode 100644 index 0000000000..9db54f438d --- /dev/null +++ b/lib/ic/examples/pre_post_condition/ReadMe.txt @@ -0,0 +1,73 @@ + ``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 via the world wide web 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. + + The Initial Developer of the Original Code is Ericsson Utvecklings AB. + Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings + AB. All Rights Reserved.'' + + $Id$ + + +This example shows how pre and post condition can be used for a Corba server object. + + +The example consists of three files; + +ex.idl - the interface specification +m_i_impl.erl - the server implementation +tracer.erl - a module which contains a pre and a post condition + + +The IDL file can for example be compiled with the following options: + +ic:gen(ex, [{precond, {tracer, pre}},{{postcond, "m::i::f"}, {tracer, post}}]). + +The result is that the function m::i::f gets both a pre and post condition call while +the function m::i::g just get a pre condition call. + + +A pre/post condition function should always return the atom ok and if something is wrong +it should raise an exception ( ex: corba:raise(#userexception{}) ). + + + + +Compile all erlang files and test the application. + +First start an erlang node, then type the following commands in the erlang shell. + +1> mnesia:create_schema([]). +2> orber:install([]). +3> orber:start(). +3> +3> X = m_i:oe_create(). +4> catch m_i:f(X, 17). +Precond called in process <0.139.0>: m_i:f() [[],17] +f working .... +Postcond called in process <0.139.0>: m_i:f() [[],17] {reply,{17,17},[]} +17 +5> +5> catch m_i:f(X, q). +6> {'EXCEPTION',{m_NotAnInteger,"IDL:m/NotAnInteger:1.0"}} +7> +7>m_i:g(X, 17). +Precond called in process <0.139.0>: m_i:g() [[],17] +ok +g working .... +8> +8>corba_boa:dispose(X). +9> orber:stop(). +10> + + + + + diff --git a/lib/ic/examples/pre_post_condition/ex.idl b/lib/ic/examples/pre_post_condition/ex.idl new file mode 100644 index 0000000000..e632448cc5 --- /dev/null +++ b/lib/ic/examples/pre_post_condition/ex.idl @@ -0,0 +1,29 @@ +// ``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 via the world wide web 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. +// +// The Initial Developer of the Original Code is Ericsson Utvecklings AB. +// Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings +// AB. All Rights Reserved.'' +// +// $Id$ +// + +module m { + + exception NotAnInteger {}; + + interface i { + short f(in short i); + oneway void g(in long i); + }; + +}; + diff --git a/lib/ic/examples/pre_post_condition/m_i_impl.erl b/lib/ic/examples/pre_post_condition/m_i_impl.erl new file mode 100644 index 0000000000..d43ee0ac94 --- /dev/null +++ b/lib/ic/examples/pre_post_condition/m_i_impl.erl @@ -0,0 +1,49 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1999-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% +%% +%% +%%------------------------------------------------------------ +%% +%% Example +%% +%%------------------------------------------------------------ +-module(m_i_impl). + +%% Standard functions +-export([init/1, terminate/2]). +%% Interface functions +-export([f/2, g/2]). + +init(_Env) -> + {ok, []}. + +terminate(_From, _Reason) -> + ok. + +f(State, In) -> + io:format("f working ....\n", []), + {reply, In, State}. + +g(State, _In) -> + io:format("g working ....\n", []), + {noreply, State}. + + + + + diff --git a/lib/ic/examples/pre_post_condition/tracer.erl b/lib/ic/examples/pre_post_condition/tracer.erl new file mode 100644 index 0000000000..4cba7ba9bb --- /dev/null +++ b/lib/ic/examples/pre_post_condition/tracer.erl @@ -0,0 +1,56 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1999-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: tracer.erl +%% +%% Description: +%% This file contains an example of pre and post conditions for +%% the corba backend. +%% +%%----------------------------------------------------------------- +-module(tracer). +-include("m.hrl"). + +%%----------------------------------------------------------------- +%% External exports +%%----------------------------------------------------------------- +-export([pre/3, post/4]). + +%%----------------------------------------------------------------- +%% Internal exports +%%----------------------------------------------------------------- +-export([]). + +%%----------------------------------------------------------------- +%% External functions +%%----------------------------------------------------------------- +pre(M, F, [State, I]) when is_integer(I) -> + io:format("Precond called in process ~p: ~s:~s() ~p\n", [self(), M, F, [State, I]]), + ok; +pre(_M, _F, _A) -> %% Just an silly example to get an exception case + corba:raise(#'m_NotAnInteger'{}). + +post(M, F, A, R) -> + io:format("Postcond called in process ~p: ~s:~s() ~p ~p\n", [self(), M, F, A, R]), + ok. + +%%----------------------------------------------------------------- +%% Internal functions +%%----------------------------------------------------------------- |