diff options
author | Johnny Willemsen <jwillemsen@remedy.nl> | 2009-12-09 12:38:52 +0000 |
---|---|---|
committer | Johnny Willemsen <jwillemsen@remedy.nl> | 2009-12-09 12:38:52 +0000 |
commit | 56d549c52948c558ac6d40778365a5888e95a201 (patch) | |
tree | 22866f46b458ad0cb022ea17c4657fb6083e17ab | |
parent | aa680cf5d80ce7f7ea756d05e1ba37240ac45fc4 (diff) | |
download | ATCD-56d549c52948c558ac6d40778365a5888e95a201.tar.gz |
Wed Dec 9 12:37:33 UTC 2009 Johnny Willemsen <jwillemsen@remedy.nl>
* tests/IDL_Test/Local_Facet:
Removed
* tests/CIAO_ComponentServer/Local_Facet:
New test for testing local facets
* ciao/ComponentServer/CIAO_ComponentServer.idl
* ciao/ComponentServer/CIAO_Container_Impl.cpp
* ciao/ComponentServer/CIAO_Container_Impl.h
* ciao/Containers/Container_Base.idl
* ciao/Containers/Session/Session_Container.cpp
* ciao/Containers/Session/Session_Container.h
Added support to connect local facets by William Otte
* ciao/Servants/Servant_Impl_Base.cpp:
* ciao/Servants/Servant_Impl_Base.h:
Made several methods pure virtual instead of not implemented
6 files changed, 583 insertions, 0 deletions
diff --git a/CIAO/tests/CIAO_ComponentServer/Local_Facet/Local_Facet.idl b/CIAO/tests/CIAO_ComponentServer/Local_Facet/Local_Facet.idl new file mode 100644 index 00000000000..82b82b5e6a2 --- /dev/null +++ b/CIAO/tests/CIAO_ComponentServer/Local_Facet/Local_Facet.idl @@ -0,0 +1,18 @@ +// $Id$ +#include <Components.idl> + +interface trigger +{ + oneway void run_test (); +}; + +local interface Foo +{ + void simple (); +}; + +component Bar supports trigger +{ + uses Foo foo_in; + provides Foo foo_out; +}; diff --git a/CIAO/tests/CIAO_ComponentServer/Local_Facet/Local_Facet.mpc b/CIAO/tests/CIAO_ComponentServer/Local_Facet/Local_Facet.mpc new file mode 100644 index 00000000000..022c15a5cad --- /dev/null +++ b/CIAO/tests/CIAO_ComponentServer/Local_Facet/Local_Facet.mpc @@ -0,0 +1,146 @@ +// $Id$ +// This file is generated with "generate_component_mpc.pl Local_Facet" + +project(Local_Facet_idl_gen) : componentidldefaults { + + custom_only = 1 + idlflags += -Wb,stub_export_macro=LOCAL_FACET_STUB_Export \ + -Wb,stub_export_include=Local_Facet_stub_export.h \ + -Wb,skel_export_macro=LOCAL_FACET_SVNT_Export \ + -Wb,skel_export_include=Local_Facet_svnt_export.h \ + -Wb,exec_export_macro=LOCAL_FACET_EXEC_Export \ + -Wb,exec_export_include=Local_Facet_exec_export.h + + IDL_Files { + Local_Facet.idl + } +} + +project(Local_Facet_lem_gen) : ciaoidldefaults { + + after += Local_Facet_idl_gen + custom_only = 1 + idlflags += -Wb,stub_export_macro=LOCAL_FACET_LEM_STUB_Export \ + -Wb,stub_export_include=Local_Facet_lem_stub_export.h \ + -SS -Gxhst + + IDL_Files { + Local_FacetE.idl + } +} + +project(Local_Facet_lem_stub) : ccm_svnt { + + after += Local_Facet_lem_gen Local_Facet_stub + libs += Local_Facet_stub + + + sharedname = Local_Facet_lem_stub + dynamicflags = LOCAL_FACET_LEM_STUB_BUILD_DLL + + IDL_Files { + } + + Source_Files { + Local_FacetEC.cpp + } + + Header_Files { + Local_FacetEC.h + Local_Facet_lem_stub_export.h + } + + Inline_Files { + Local_FacetEC.inl + } +} + +project(Local_Facet_stub) : ccm_stub { + + after += Local_Facet_idl_gen + libs += + + + sharedname = Local_Facet_stub + dynamicflags = LOCAL_FACET_STUB_BUILD_DLL + + IDL_Files { + } + + Source_Files { + Local_FacetC.cpp + } + + Header_Files { + Local_FacetC.h + Local_Facet_stub_export.h + } + + Inline_Files { + Local_FacetC.inl + } +} + +project(Local_Facet_exec) : ciao_executor { + + after += Local_Facet_lem_stub Local_Facet_stub + sharedname = Local_Facet_exec + libs += Local_Facet_stub Local_Facet_lem_stub + + + dynamicflags = LOCAL_FACET_EXEC_BUILD_DLL + + IDL_Files { + } + + Source_Files { + Local_Facet_exec.cpp + } + + Header_Files { + Local_Facet_exec.h + Local_Facet_exec_export.h + } + + Inline_Files { + } +} + + +project(Local_Facet_svnt) : ciao_servant { + + after += Local_Facet_lem_stub + sharedname = Local_Facet_svnt + libs += Local_Facet_stub Local_Facet_lem_stub + + + dynamicflags = LOCAL_FACET_SVNT_BUILD_DLL + + IDL_Files { + } + + Source_Files { + Local_FacetS.cpp + Local_Facet_svnt.cpp + } + + Header_Files { + Local_FacetS.h + Local_Facet_svnt.h + Local_Facet_svnt_export.h + } + + Inline_Files { + Local_FacetS.inl + } +} + +project (Lf_CIAOComponentServer_Tst) : ciao_componentserver_stub, ccm_configvalue, ciao_cs_client, ciao_logger { + after += Local_Facet_stub Local_Facet_svnt + libs += Local_Facet_stub + IDL_Files { + } + Source_Files { + client.cpp + } +}
\ No newline at end of file diff --git a/CIAO/tests/CIAO_ComponentServer/Local_Facet/Local_Facet_exec.cpp b/CIAO/tests/CIAO_ComponentServer/Local_Facet/Local_Facet_exec.cpp new file mode 100644 index 00000000000..7db3d2dd353 --- /dev/null +++ b/CIAO/tests/CIAO_ComponentServer/Local_Facet/Local_Facet_exec.cpp @@ -0,0 +1,119 @@ +// -*- C++ -*- +// $Id$ + +#include "Local_Facet_exec.h" +#include "ciao/Logger/Log_Macros.h" + +namespace CIAO_Bar_Impl +{ + //============================================================ + // Facet Executor Implementation Class: Foo_exec_i + //============================================================ + + Foo_exec_i::Foo_exec_i (void) + { + } + + Foo_exec_i::~Foo_exec_i (void) + { + } + + void Foo_exec_i::simple (void) + { + CIAO_DEBUG ((LM_INFO, "Got simple invocation\n")); + } + + // Operations from ::Foo + + //============================================================ + // Component Executor Implementation Class: Bar_exec_i + //============================================================ + + Bar_exec_i::Bar_exec_i (void) + { + } + + Bar_exec_i::~Bar_exec_i (void) + { + } + + // Supported operations and attributes. + + // Component attributes and port operations. + + ::CCM_Foo_ptr + Bar_exec_i::get_foo_out (void) + { + return new Foo_exec_i (); + } + + // Operations from Components::SessionComponent. + + void + Bar_exec_i::set_session_context ( + ::Components::SessionContext_ptr ctx) + { + this->context_ = + ::CCM_Bar_Context::_narrow (ctx); + + if ( ::CORBA::is_nil (this->context_.in ())) + { + throw ::CORBA::INTERNAL (); + } + } + + void + Bar_exec_i::run_test (void) + { + ::Foo_var foo_intf = this->context_->get_connection_foo_in (); + + if (CORBA::is_nil (foo_intf)) + { + CIAO_ERROR ((LM_ERROR, "ERROR: Local_Facet_Test: got a nil object reference for my connection\n")); + return; + } + + CIAO_DEBUG ((LM_DEBUG, "Invoking simple\n")); + foo_intf->simple (); + + CIAO_DEBUG ((LM_INFO, "Test successful!\n")); + } + + void + Bar_exec_i::configuration_complete (void) + { + /* Your code here. */ + } + + void + Bar_exec_i::ccm_activate (void) + { + /* Your code here. */ + } + + void + Bar_exec_i::ccm_passivate (void) + { + /* Your code here. */ + } + + void + Bar_exec_i::ccm_remove (void) + { + /* Your code here. */ + } + + extern "C" LOCAL_FACET_EXEC_Export ::Components::EnterpriseComponent_ptr + create_Bar_Impl (void) + { + ::Components::EnterpriseComponent_ptr retval = + ::Components::EnterpriseComponent::_nil (); + + ACE_NEW_NORETURN ( + retval, + Bar_exec_i); + + return retval; + } +} + diff --git a/CIAO/tests/CIAO_ComponentServer/Local_Facet/Local_Facet_exec.h b/CIAO/tests/CIAO_ComponentServer/Local_Facet/Local_Facet_exec.h new file mode 100644 index 00000000000..4113d147adc --- /dev/null +++ b/CIAO/tests/CIAO_ComponentServer/Local_Facet/Local_Facet_exec.h @@ -0,0 +1,81 @@ +// -*- C++ -*- +// $Id$ + +#ifndef CIAO_LOCAL_FACET_EXEC_H_ +#define CIAO_LOCAL_FACET_EXEC_H_ + +#include /**/ "ace/pre.h" + +#include "Local_FacetEC.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include /**/ "Local_Facet_exec_export.h" +#include "tao/LocalObject.h" + + +namespace CIAO_Bar_Impl +{ + class LOCAL_FACET_EXEC_Export Foo_exec_i + : public virtual ::CCM_Foo, + public virtual ::CORBA::LocalObject + { + public: + Foo_exec_i (void); + virtual ~Foo_exec_i (void); + + // Operations and attributes from ::Foo + virtual void simple (void); + }; + + class LOCAL_FACET_EXEC_Export Bar_exec_i + : public virtual Bar_Exec, + public virtual ::CORBA::LocalObject + { + public: + Bar_exec_i (void); + virtual ~Bar_exec_i (void); + + //@{ + /** Supported operations and attributes. */ + virtual void run_test (void); + + //@} + + //@{ + /** Component attributes and port operations. */ + + + virtual ::CCM_Foo_ptr + get_foo_out (void); + //@} + + //@{ + /** Operations from Components::SessionComponent. */ + + virtual void + set_session_context ( + ::Components::SessionContext_ptr ctx); + + virtual void configuration_complete (void); + + virtual void ccm_activate (void); + virtual void ccm_passivate (void); + virtual void ccm_remove (void); + //@} + + + private: + ::CCM_Bar_Context_var context_; + }; + + extern "C" LOCAL_FACET_EXEC_Export ::Components::EnterpriseComponent_ptr + create_Bar_Impl (void); +} + +#include /**/ "ace/post.h" + +#endif /* ifndef */ + diff --git a/CIAO/tests/CIAO_ComponentServer/Local_Facet/client.cpp b/CIAO/tests/CIAO_ComponentServer/Local_Facet/client.cpp new file mode 100644 index 00000000000..10009051d88 --- /dev/null +++ b/CIAO/tests/CIAO_ComponentServer/Local_Facet/client.cpp @@ -0,0 +1,186 @@ +// $Id$ + +#include "ace/Get_Opt.h" +#include "ciao/ComponentServer/CIAO_CS_ClientS.h" +#include "ciao/ComponentServer/CIAO_ComponentServerC.h" +#include "ciao/ComponentServer/CIAO_ServerActivator_Impl.h" +#include "ciao/ComponentServer/CIAO_ComponentInstallation_Impl.h" +#include "ciao/ComponentServer/CIAO_PropertiesC.h" +#include "ciao/Valuetype_Factories/ConfigValue.h" +#include "ciao/Logger/Logger_Service.h" + +#include "Local_FacetC.h" + +const char *cs_path = "ciao_componentserver"; +CORBA::ULong spawn_delay = 30; + +int +parse_args (int argc, ACE_TCHAR *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, ACE_TEXT("s:d:")); + int c; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 's': + cs_path = ACE_TEXT_ALWAYS_CHAR (get_opts.opt_arg ()); + break; + + case 'd': + spawn_delay = ACE_OS::atoi (get_opts.opt_arg ()); + break; + + case '?': + default: + ACE_ERROR_RETURN ((LM_ERROR, + "usage: %s " + "-s <path> " + "-d <uint> " + "\n", + argv [0]), + -1); + } + // Indicates sucessful parsing of the command line + return 0; +} + +int +ACE_TMAIN (int argc, ACE_TCHAR **argv) +{ + using namespace CIAO::Deployment; + + CIAO::Logger_Service logger; + + logger.init (argc, argv); + try + { + CORBA::ORB_var orb = CORBA::ORB_init (argc, argv); + if (parse_args (argc, argv) != 0) + return 1; + + CORBA::Object_var object = + orb->resolve_initial_references ("RootPOA"); + + PortableServer::POA_var root_poa = + PortableServer::POA::_narrow (object.in ()); + + PortableServer::POAManager_var poa_manager = + root_poa->the_POAManager (); + + poa_manager->activate (); + ACE_DEBUG ((LM_DEBUG, "foo\n")); + + CIAO::Deployment::ComponentInstallation_Impl *tmp_ci = 0; + + ACE_NEW_THROW_EX (tmp_ci, + CIAO::Deployment::ComponentInstallation_Impl (), + CORBA::NO_MEMORY ()); + + PortableServer::ServantBase_var safe_servant = tmp_ci; + + root_poa->activate_object (tmp_ci); + + CIAO_ServerActivator_i *sa_tmp = new CIAO_ServerActivator_i (spawn_delay, + cs_path, + 0, + false, + tmp_ci->_this (), + orb.in (), + root_poa.in ()); + + PortableServer::ServantBase_var safe = sa_tmp; + + ServerActivator_var sa = sa_tmp->_this (); + + //ACE_DEBUG ((LM_DEBUG, "Attempting to create componentserver with no configvalues\n")); + // Make a componentserver with no configvalues + ComponentServer_var server1 (ComponentServer::_narrow (sa->create_component_server (0))); + + if (CORBA::is_nil (server1.in ())) + { + ACE_ERROR_RETURN ((LM_ERROR, + "Nil componentserver references"), -1); + } + + Components::Deployment::Container_var tmp = server1->create_container (0); + Container_var cont1a = Container::_narrow (tmp.in ()); + + if (CORBA::is_nil (cont1a.in ())) + { + ACE_ERROR ((LM_ERROR, "Error: Got nil object reference from first create op on server 1 %u %u\n", + tmp.in (), cont1a.in ())); + return -1; + } + + // Make our configvalues + // ::Components::ConfigValues_var configs = new + CORBA::Any val; + ::Components::ConfigValues configs(3); + configs.length (3); + + val <<= "create_Bar_Servant"; + configs[0] = new CIAO::ConfigValue_impl (CIAO::Deployment::SVNT_ENTRYPT, + val); + val <<= "Local_Facet_svnt"; + configs[1] = new CIAO::ConfigValue_impl (CIAO::Deployment::SVNT_ARTIFACT, + val); + tmp_ci->install ("Local_Facet_svnt", "Local_Facet_svnt"); + val <<= "Local_Facet_exec"; + configs[2] = new CIAO::ConfigValue_impl (CIAO::Deployment::EXEC_ARTIFACT, + val); + tmp_ci->install ("Local_Facet_exec", "Local_Facet_exec"); + + // Install Components + Components::CCMObject_var comp1 = cont1a->install_component ("User", + "create_Bar_Impl", + configs); + Components::CCMObject_var comp2 = cont1a->install_component ("Provider", + "create_Bar_Impl", + configs); + + if (CORBA::is_nil (comp1) || CORBA::is_nil (comp2)) + { + ACE_ERROR ((LM_ERROR, "Got back a nil component ref from install_component\n")); + return -1; + } + + ::Bar_var user = ::Bar::_narrow (comp1.in ()); + + + if (CORBA::is_nil (user)) + { + ACE_ERROR ((LM_ERROR, "Narrow failed from CCMObject to Bar\n")); + return -1; + } + + + cont1a->connect_local_facet (comp2, "foo_out", comp1, "foo_in"); + + user->run_test (); + + cont1a->remove_component (comp1.in ()); + cont1a->remove_component (comp2.in ()); + + server1->remove_container (cont1a.in ()); + + //ACE_DEBUG ((LM_DEBUG, "Removing component server\n")); + sa->remove_component_server (server1.in ()); + //ACE_DEBUG ((LM_DEBUG, "Componentserver removed\n")); + + orb->destroy (); + } + catch (::Components::CreateFailure &) + { + ACE_ERROR ((LM_ERROR, "Error: Caught CreateFailure exception.\n")); + } + catch (::Components::RemoveFailure &) + { + ACE_ERROR ((LM_ERROR, "Error: Caught RemoveFailure exception.\n")); + } + catch (...) + { + ACE_ERROR ((LM_ERROR, "Error: Caught unknown exception\n")); + } + return 0; +} diff --git a/CIAO/tests/CIAO_ComponentServer/Local_Facet/run_test.pl b/CIAO/tests/CIAO_ComponentServer/Local_Facet/run_test.pl new file mode 100755 index 00000000000..5d8a72f7694 --- /dev/null +++ b/CIAO/tests/CIAO_ComponentServer/Local_Facet/run_test.pl @@ -0,0 +1,33 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# -*- perl -*- + +use lib "$ENV{ACE_ROOT}/bin"; +use PerlACE::TestTarget; + +$status = 0; +$ciao_root = "$ENV{CIAO_ROOT}"; + +foreach $i (@ARGV) { + if ($i eq '-debug') { + $ENV{"DANCE_TRACE_ENABLE"} = 1; + $ENV{"CIAO_TRACE_ENABLE"} = 1; + } +} + +my $target = PerlACE::TestTarget::create_target ($PerlACE::TestConfig); + +$TG = $target->CreateProcess ("client", "-s $ciao_root/bin/ciao_componentserver -d 120"); +$server_status = $TG->SpawnWaitKill ($target->ProcessStartWaitInterval ()); + +if ($server_status != 0) { + print STDERR "ERROR: process returned $server_status\n"; + exit 1; +} + +$target->GetStderrLog(); + +exit $status; |