summaryrefslogtreecommitdiff
path: root/TAO
diff options
context:
space:
mode:
Diffstat (limited to 'TAO')
-rw-r--r--TAO/ChangeLogs/ChangeLog-02a44
-rw-r--r--TAO/tao/Makefile3
-rw-r--r--TAO/tao/ORB.cpp34
-rw-r--r--TAO/tao/ORB.h5
-rw-r--r--TAO/tao/Object_Loader.cpp13
-rw-r--r--TAO/tao/Object_Loader.h56
-rw-r--r--TAO/tao/Object_Loader.i1
-rw-r--r--TAO/tao/TAO.dsp70
-rw-r--r--TAO/tao/TAO_Static.dsp24
-rw-r--r--TAO/tests/Makefile3
-rw-r--r--TAO/tests/Object_Loader/Loader.cpp66
-rw-r--r--TAO/tests/Object_Loader/Loader.h46
-rw-r--r--TAO/tests/Object_Loader/Loader.i1
-rw-r--r--TAO/tests/Object_Loader/Makefile59
-rw-r--r--TAO/tests/Object_Loader/OLT_Export.h36
-rw-r--r--TAO/tests/Object_Loader/Object_Loader.dsw41
-rw-r--r--TAO/tests/Object_Loader/Test.idl14
-rw-r--r--TAO/tests/Object_Loader/Test_DLL.dsp234
-rw-r--r--TAO/tests/Object_Loader/Test_i.cpp45
-rw-r--r--TAO/tests/Object_Loader/Test_i.h53
-rw-r--r--TAO/tests/Object_Loader/Test_i.i1
-rw-r--r--TAO/tests/Object_Loader/driver.cpp74
-rw-r--r--TAO/tests/Object_Loader/driver.dsp208
-rw-r--r--TAO/tests/Object_Loader/svc.conf7
24 files changed, 1097 insertions, 41 deletions
diff --git a/TAO/ChangeLogs/ChangeLog-02a b/TAO/ChangeLogs/ChangeLog-02a
index 510c968ffec..4bf6b320e6a 100644
--- a/TAO/ChangeLogs/ChangeLog-02a
+++ b/TAO/ChangeLogs/ChangeLog-02a
@@ -1,3 +1,47 @@
+Mon Apr 10 13:17:41 2000 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/Makefile:
+ * tao/TAO.dsp:
+ * tao/TAO_Static.dsp:
+ * tao/ORB.h:
+ * tao/ORB.cpp:
+ * tao/Object_Loader.h:
+ * tao/Object_Loader.i:
+ * tao/Object_Loader.cpp:
+ New style for object references, the application can invoke
+ orb->string_to_object ("DLL:....")
+ The purpose of this feature is twofold:
+ - Allow application developers to choose, very late in the
+ development cycle, if they want to dynamically load a
+ service.
+ For example they can use resolve_initial_references to resolve
+ the service, and then use -ORBInitRef Service=DLL:... to
+ dynamically load it or -ORBInitRef Service=corbaloc:... to use
+ a remote version.
+ - It can be used to dynamically load ORB components, such as the
+ POA, the DynamicAnys, the IORManipulation interface, etc.
+ All these components are accessed through the
+ resolve_initial_references interface, so they could be loaded
+ using the DLL-style IORs.
+
+ * tests/Makefile:
+ * tests/Object_Loader/Loader.cpp:
+ * tests/Object_Loader/Loader.h:
+ * tests/Object_Loader/Loader.i:
+ * tests/Object_Loader/Makefile:
+ * tests/Object_Loader/OLT_Export.h:
+ * tests/Object_Loader/Object_Loader.dsw:
+ * tests/Object_Loader/Test.idl:
+ * tests/Object_Loader/Test_DLL.dsp:
+ * tests/Object_Loader/Test_i.cpp:
+ * tests/Object_Loader/Test_i.h:
+ * tests/Object_Loader/Test_i.i:
+ * tests/Object_Loader/driver.cpp:
+ * tests/Object_Loader/driver.dsp:
+ * tests/Object_Loader/svc.conf:
+ Add a very simple test that creates multiple ORBs and loads a
+ different object into each one.
+
Mon Apr 10 13:41:51 2000 Nanbor Wang <nanbor@cs.wustl.edu>
* docs/compiler.html: Removed the entry about -Gc flag (compile
diff --git a/TAO/tao/Makefile b/TAO/tao/Makefile
index 82a48616704..d07d6c8531b 100644
--- a/TAO/tao/Makefile
+++ b/TAO/tao/Makefile
@@ -190,7 +190,8 @@ ORB_CORE_FILES = \
GIOPC \
BoundsC \
TAOC \
- TAOS
+ TAOS \
+ Object_Loader
DYNAMIC_ANY_FILES =
diff --git a/TAO/tao/ORB.cpp b/TAO/tao/ORB.cpp
index f5bfbee44c9..41d4c2ff66c 100644
--- a/TAO/tao/ORB.cpp
+++ b/TAO/tao/ORB.cpp
@@ -31,6 +31,7 @@
#include "tao/POA.h"
#include "tao/Request.h"
#include "tao/MProfile.h"
+#include "tao/Object_Loader.h"
#if (TAO_HAS_INTERFACE_REPOSITORY == 1)
# include "tao/InterfaceC.h"
@@ -68,6 +69,7 @@ ACE_RCSID(tao, ORB, "$Id$")
static const char ior_prefix [] = "IOR:";
static const char file_prefix[] = "file://";
+static const char dll_prefix[] = "DLL:";
// = Static initialization.
@@ -1686,7 +1688,7 @@ CORBA_ORB::string_to_object (const char *str,
CORBA::COMPLETED_NO),
CORBA::Object::_nil ());
-
+
if (ACE_OS::strncmp (str,
file_prefix,
sizeof file_prefix - 1) == 0)
@@ -1697,6 +1699,11 @@ CORBA_ORB::string_to_object (const char *str,
sizeof ior_prefix - 1) == 0)
return this->ior_string_to_object (str + sizeof ior_prefix - 1,
ACE_TRY_ENV);
+ else if (ACE_OS::strncmp (str,
+ dll_prefix,
+ sizeof dll_prefix - 1) == 0)
+ return this->dll_string_to_object (str + sizeof dll_prefix - 1,
+ ACE_TRY_ENV);
else
return this->url_ior_string_to_object (str, ACE_TRY_ENV);
}
@@ -1823,7 +1830,7 @@ CORBA_ORB::ior_string_to_object (const char *str,
// Create deencapsulation stream ... then unmarshal objref from that
// stream.
-
+
int byte_order = *(mb.rd_ptr ());
mb.rd_ptr (1);
mb.wr_ptr (len);
@@ -1868,6 +1875,29 @@ CORBA_ORB::file_string_to_object (const char* filename,
return object;
}
+// ****************************************************************
+
+CORBA::Object_ptr
+CORBA_ORB::dll_string_to_object (const char *str,
+ CORBA::Environment &ACE_TRY_ENV)
+{
+ TAO_Object_Loader *loader =
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance (str);
+ if (loader == 0)
+ {
+ ACE_THROW_RETURN
+ (CORBA::INV_OBJREF
+ (CORBA_SystemException::_tao_minor_code
+ (TAO_NULL_POINTER_MINOR_CODE, 0),
+ CORBA::COMPLETED_NO),
+ CORBA::Object::_nil ());
+ }
+
+ return loader->create_object (this, ACE_TRY_ENV);
+}
+
+// ****************************************************************
+
// Convert an URL style IOR in an object
CORBA::Object_ptr
diff --git a/TAO/tao/ORB.h b/TAO/tao/ORB.h
index 0b86fd31c0a..7a8c1d98666 100644
--- a/TAO/tao/ORB.h
+++ b/TAO/tao/ORB.h
@@ -772,6 +772,11 @@ private:
// Read an IOR from a file and then parse it, returning the object
// reference.
+ CORBA::Object_ptr dll_string_to_object (const char* service_name,
+ CORBA::Environment &ACE_TRY_ENV);
+ // Uses the service configurator to dynamically load an
+ // implementation of an object, and create that object.
+
CORBA::Object_ptr ior_string_to_object (const char* ior,
CORBA::Environment &ACE_TRY_ENV);
// Convert an OMG IOR into an object reference.
diff --git a/TAO/tao/Object_Loader.cpp b/TAO/tao/Object_Loader.cpp
new file mode 100644
index 00000000000..0d574ce8023
--- /dev/null
+++ b/TAO/tao/Object_Loader.cpp
@@ -0,0 +1,13 @@
+// $Id$
+
+#include "tao/Object_Loader.h"
+
+#if !defined(__ACE_INLINE__)
+#include "tao/Object_Loader.i"
+#endif /* __ACE_INLINE__ */
+
+ACE_RCSID(tao, Object_Loader, "$Id$")
+
+TAO_Object_Loader::~TAO_Object_Loader (void)
+{
+}
diff --git a/TAO/tao/Object_Loader.h b/TAO/tao/Object_Loader.h
new file mode 100644
index 00000000000..04ccc6ad115
--- /dev/null
+++ b/TAO/tao/Object_Loader.h
@@ -0,0 +1,56 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO
+//
+// = FILENAME
+// Object_Loader.h
+//
+// = AUTHOR
+// Carlos O'Ryan (coryan@cs.wustl.edu)
+//
+// ============================================================================
+
+#ifndef TAO_OBJECT_LOADER_H
+#define TAO_OBJECT_LOADER_H
+#include "ace/pre.h"
+
+#include "tao/corbafwd.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/Service_Object.h"
+
+class TAO_Export TAO_Object_Loader : public ACE_Service_Object
+{
+ // = TITLE
+ // A class to dynamically load object implementations into an
+ // ORB.
+ //
+ // = DESCRIPTION
+ // Many services and components of the ORB can be dynamically
+ // loaded, this is the class used to implement ....
+ // @@ TODO
+ //
+public:
+ virtual ~TAO_Object_Loader (void);
+ // The destructor
+
+ virtual CORBA::Object_ptr create_object (CORBA::ORB_ptr orb,
+ CORBA::Environment &)
+ ACE_THROW_SPEC (()) = 0;
+ // Create and activate a new object into the orb.
+ // This method cannot throw any exception, but it can return a nil
+ // object to indicate an error condition.
+};
+
+#if defined (__ACE_INLINE__)
+# include "tao/Object_Loader.i"
+#endif /* __ACE_INLINE__ */
+
+#include "ace/post.h"
+#endif /* TAO_OBJECT_LOADER_H */
diff --git a/TAO/tao/Object_Loader.i b/TAO/tao/Object_Loader.i
new file mode 100644
index 00000000000..cfa1da318d3
--- /dev/null
+++ b/TAO/tao/Object_Loader.i
@@ -0,0 +1 @@
+// $Id$
diff --git a/TAO/tao/TAO.dsp b/TAO/tao/TAO.dsp
index 767e8c1658e..dc85af4710d 100644
--- a/TAO/tao/TAO.dsp
+++ b/TAO/tao/TAO.dsp
@@ -18,20 +18,16 @@ CFG=TAO DLL - Win32 Debug
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "TAO DLL - Win32 Release" (based on\
- "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TAO DLL - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "TAO DLL - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "TAO DLL - Win32 Alpha Release" (based on\
- "Win32 (ALPHA) Dynamic-Link Library")
-!MESSAGE "TAO DLL - Win32 Alpha Debug" (based on\
- "Win32 (ALPHA) Dynamic-Link Library")
-!MESSAGE "TAO DLL - Win32 MFC Debug" (based on\
- "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "TAO DLL - Win32 MFC Release" (based on\
- "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TAO DLL - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library")
+!MESSAGE "TAO DLL - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library")
+!MESSAGE "TAO DLL - Win32 MFC Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TAO DLL - Win32 MFC Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath "Desktop"
@@ -110,12 +106,12 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-MTL=midl.exe
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
CPP=cl.exe
# ADD BASE CPP /Gt0 /I "../" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "TAO_BUILD_DLL" /FD nologo MT Gt0 W3 GX O2 I "../../" /c
# ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "../../" /I "../" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "TAO_BUILD_DLL" /FD /c
+MTL=midl.exe
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
@@ -140,12 +136,12 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-MTL=midl.exe
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
CPP=cl.exe
# ADD BASE CPP /Gt0 /I "../" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "TAO_BUILD_DLL" /FD /MTd nologo Gt0 W3 GX Zi Od Gy I "../../" /c
# ADD CPP /nologo /Gt0 /W3 /GX /Zi /Od /Gy /I "../../" /I "../" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "TAO_BUILD_DLL" /FD /MDd /c
+MTL=midl.exe
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
@@ -1795,6 +1791,25 @@ SOURCE=.\Object_KeyC.cpp
# End Source File
# Begin Source File
+SOURCE=.\Object_Loader.cpp
+
+!IF "$(CFG)" == "TAO DLL - Win32 Release"
+
+!ELSEIF "$(CFG)" == "TAO DLL - Win32 Debug"
+
+!ELSEIF "$(CFG)" == "TAO DLL - Win32 Alpha Release"
+
+!ELSEIF "$(CFG)" == "TAO DLL - Win32 Alpha Debug"
+
+!ELSEIF "$(CFG)" == "TAO DLL - Win32 MFC Debug"
+
+!ELSEIF "$(CFG)" == "TAO DLL - Win32 MFC Release"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
SOURCE=.\ObjectIDList.cpp
!IF "$(CFG)" == "TAO DLL - Win32 Release"
@@ -3421,6 +3436,10 @@ SOURCE=.\Object_KeyC.h
# End Source File
# Begin Source File
+SOURCE=.\Object_Loader.h
+# End Source File
+# Begin Source File
+
SOURCE=.\ObjectIDList.h
# End Source File
# Begin Source File
@@ -3897,6 +3916,10 @@ SOURCE=.\Object_KeyC.i
# End Source File
# Begin Source File
+SOURCE=.\Object_Loader.i
+# End Source File
+# Begin Source File
+
SOURCE=.\ObjectIDList.i
# End Source File
# Begin Source File
@@ -4066,21 +4089,6 @@ SOURCE=.\ValueFactory_Map.i
# Begin Source File
SOURCE=.\tao.rc
-
-!IF "$(CFG)" == "TAO DLL - Win32 Release"
-
-!ELSEIF "$(CFG)" == "TAO DLL - Win32 Debug"
-
-!ELSEIF "$(CFG)" == "TAO DLL - Win32 Alpha Release"
-
-!ELSEIF "$(CFG)" == "TAO DLL - Win32 Alpha Debug"
-
-!ELSEIF "$(CFG)" == "TAO DLL - Win32 MFC Debug"
-
-!ELSEIF "$(CFG)" == "TAO DLL - Win32 MFC Release"
-
-!ENDIF
-
# End Source File
# End Group
# End Target
diff --git a/TAO/tao/TAO_Static.dsp b/TAO/tao/TAO_Static.dsp
index 4384fe82cab..3a7c54eba37 100644
--- a/TAO/tao/TAO_Static.dsp
+++ b/TAO/tao/TAO_Static.dsp
@@ -22,9 +22,11 @@ CFG=TAO LIB - Win32 Debug
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath "Desktop"
CPP=cl.exe
+RSC=rc.exe
!IF "$(CFG)" == "TAO LIB - Win32 Release"
@@ -38,12 +40,11 @@ CPP=cl.exe
# PROP Output_Dir ""
# PROP Intermediate_Dir "LIB\Release"
# PROP Target_Dir ""
-RSC=rc.exe
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../" /I "../" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D ACE_HAS_DLL=0 /D TAO_HAS_DLL=0 /D "ACE_NO_INLINE" /FD /c
# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
@@ -63,11 +64,10 @@ LIB32=link.exe -lib
# PROP Output_Dir ""
# PROP Intermediate_Dir "LIB\Debug"
# PROP Target_Dir ""
-RSC=rc.exe
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "../../" /I "../" /D TAO_HAS_DLL=0 /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D ACE_HAS_DLL=0 /YX /FD /c
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
@@ -414,6 +414,10 @@ SOURCE=.\Object_KeyC.cpp
# End Source File
# Begin Source File
+SOURCE=.\Object_Loader.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\ObjectIDList.cpp
# End Source File
# Begin Source File
@@ -994,6 +998,10 @@ SOURCE=.\Object_KeyC.h
# End Source File
# Begin Source File
+SOURCE=.\Object_Loader.h
+# End Source File
+# Begin Source File
+
SOURCE=.\ObjectIDList.h
# End Source File
# Begin Source File
@@ -1462,6 +1470,10 @@ SOURCE=.\Object_KeyC.i
# End Source File
# Begin Source File
+SOURCE=.\Object_Loader.i
+# End Source File
+# Begin Source File
+
SOURCE=.\ObjectIDList.i
# End Source File
# Begin Source File
diff --git a/TAO/tests/Makefile b/TAO/tests/Makefile
index 92b39583486..57c64a2ad7c 100644
--- a/TAO/tests/Makefile
+++ b/TAO/tests/Makefile
@@ -25,7 +25,8 @@ DIRS = CDR \
ORB_init \
Smart_Proxies \
Nested_Event_Loop \
- Leader_Followers
+ Leader_Followers \
+ Object_Loader
ifndef TAO_ROOT
TAO_ROOT = $(ACE_ROOT)/TAO
diff --git a/TAO/tests/Object_Loader/Loader.cpp b/TAO/tests/Object_Loader/Loader.cpp
new file mode 100644
index 00000000000..35138f9fd79
--- /dev/null
+++ b/TAO/tests/Object_Loader/Loader.cpp
@@ -0,0 +1,66 @@
+// $Id$
+
+#include "Loader.h"
+#include "test_i.h"
+
+#if !defined(__ACE_INLINE__)
+#include "Loader.i"
+#endif /* __ACE_INLINE__ */
+
+ACE_RCSID(Object_Loader, Loader, "$Id$")
+
+Loader::Loader (void)
+{
+}
+
+CORBA::Object_ptr
+Loader::create_object (CORBA::ORB_ptr orb,
+ CORBA::Environment &ACE_TRY_ENV)
+{
+ ACE_TRY
+ {
+ CORBA::Object_var obj =
+ orb->resolve_initial_references ("RootPOA", ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var poa =
+ PortableServer::POA::_narrow (obj.in (), ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ PortableServer::POAManager_var mgr =
+ poa->the_POAManager (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ mgr->activate (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ Test_i *test;
+ ACE_NEW_RETURN (test, Test_i (poa.in ()),
+ CORBA::Object::_nil ());
+
+ PortableServer::ServantBase_var tmp = test;
+ obj = test->_this (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ return obj._retn ();
+ }
+ ACE_CATCHANY
+ {
+ }
+ ACE_ENDTRY;
+ return CORBA::Object::_nil ();
+}
+
+// ****************************************************************
+
+#if 0
+ACE_STATIC_SVC_DEFINE (Loader,
+ ASYS_TEXT ("TAO_Object_Loader"),
+ ACE_SVC_OBJ_T,
+ &ACE_SVC_NAME (Loader),
+ ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ,
+ 0)
+#endif /* 0 */
+
+ACE_FACTORY_DEFINE (OLT, Loader)
+
diff --git a/TAO/tests/Object_Loader/Loader.h b/TAO/tests/Object_Loader/Loader.h
new file mode 100644
index 00000000000..93e95177598
--- /dev/null
+++ b/TAO/tests/Object_Loader/Loader.h
@@ -0,0 +1,46 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO/tests/Object_Loader
+//
+// = FILENAME
+// Loader.h
+//
+// = AUTHOR
+// Carlos O'Ryan
+//
+// ============================================================================
+
+#ifndef TAO_OBJECT_LOADER_LOADER_H
+#define TAO_OBJECT_LOADER_LOADER_H
+
+#include "tao/Object_Loader.h"
+#include "OLT_Export.h"
+
+class OLT_Export Loader : public TAO_Object_Loader
+{
+ // = TITLE
+ // Implement the Test interface
+ //
+ // = DESCRIPTION
+ //
+public:
+ Loader (void);
+ // ctor
+
+ virtual CORBA::Object_ptr create_object (CORBA::ORB_ptr orb,
+ CORBA::Environment &)
+ ACE_THROW_SPEC (());
+ // Create a new instance
+};
+
+#if defined(__ACE_INLINE__)
+#include "Loader.i"
+#endif /* __ACE_INLINE__ */
+
+// ACE_STATIC_SVC_DECLARE (Loader)
+ACE_FACTORY_DECLARE (OLT, Loader)
+
+#endif /* TAO_OBJECT_LOADER_LOADER_H */
diff --git a/TAO/tests/Object_Loader/Loader.i b/TAO/tests/Object_Loader/Loader.i
new file mode 100644
index 00000000000..cfa1da318d3
--- /dev/null
+++ b/TAO/tests/Object_Loader/Loader.i
@@ -0,0 +1 @@
+// $Id$
diff --git a/TAO/tests/Object_Loader/Makefile b/TAO/tests/Object_Loader/Makefile
new file mode 100644
index 00000000000..0786c0136f0
--- /dev/null
+++ b/TAO/tests/Object_Loader/Makefile
@@ -0,0 +1,59 @@
+#----------------------------------------------------------------------------
+#
+# $Id$
+#
+#----------------------------------------------------------------------------
+
+#----------------------------------------------------------------------------
+# Local macros
+#----------------------------------------------------------------------------
+
+ifndef TAO_ROOT
+ TAO_ROOT = $(ACE_ROOT)/TAO
+endif # ! TAO_ROOT
+
+LDLIBS = -lTAO
+
+IDLFILES = testC testS
+BIN = driver
+LIBNAME=libTestLoader
+LIB = $(LIBNAME).a
+SHLIB = $(LIBNAME).$(SOEXT)
+
+LSRC= \
+ testC.cpp \
+ testS.cpp \
+ test_i.cpp \
+ Loader.cpp
+PSRC= \
+ driver.cpp
+ACE_SHLIBS = -lTAO -lACE
+LDLIBS = -lTAO
+
+TAO_IDLFLAGS += -Ge 1
+#----------------------------------------------------------------------------
+# Include macros and targets
+#----------------------------------------------------------------------------
+
+include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU
+include $(ACE_ROOT)/include/makeinclude/macros.GNU
+include $(TAO_ROOT)/rules.tao.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.common.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.bin.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.lib.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.local.GNU
+
+#----------------------------------------------------------------------------
+# Local targets
+#----------------------------------------------------------------------------
+
+.PRECIOUS: $(foreach ext, $(IDL_EXT), test$(ext))
+
+realclean: clean
+ -$(RM) $(foreach ext, $(IDL_EXT), test$(ext))
+
+# DO NOT DELETE THIS LINE -- g++dep uses it.
+# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
+
+# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/TAO/tests/Object_Loader/OLT_Export.h b/TAO/tests/Object_Loader/OLT_Export.h
new file mode 100644
index 00000000000..f709c1b248c
--- /dev/null
+++ b/TAO/tests/Object_Loader/OLT_Export.h
@@ -0,0 +1,36 @@
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by
+// ${ACE_ROOT}/GenExportH.BAT
+// ------------------------------
+#if !defined (OLT_EXPORT_H)
+#define OLT_EXPORT_H
+
+#include "ace/OS.h"
+
+#if !defined (OLT_HAS_DLL)
+#define OLT_HAS_DLL 1
+#endif /* ! OLT_HAS_DLL */
+
+#if defined (OLT_HAS_DLL)
+# if (OLT_HAS_DLL == 1)
+# if defined (OLT_BUILD_DLL)
+# define OLT_Export ACE_Proper_Export_Flag
+# define OLT_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# else
+# define OLT_Export ACE_Proper_Import_Flag
+# define OLT_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# endif /* OLT_BUILD_DLL */
+# else
+# define OLT_Export
+# define OLT_SINGLETON_DECLARATION(T)
+# endif /* ! OLT_HAS_DLL == 1 */
+#else
+# define OLT_Export
+# define OLT_SINGLETON_DECLARATION(T)
+#endif /* OLT_HAS_DLL */
+
+#endif /* OLT_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/tests/Object_Loader/Object_Loader.dsw b/TAO/tests/Object_Loader/Object_Loader.dsw
new file mode 100644
index 00000000000..6bf71bc4561
--- /dev/null
+++ b/TAO/tests/Object_Loader/Object_Loader.dsw
@@ -0,0 +1,41 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Object_Loader Driver"=.\driver.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "Test_DLL"=.\Test_DLL.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/TAO/tests/Object_Loader/Test.idl b/TAO/tests/Object_Loader/Test.idl
new file mode 100644
index 00000000000..924dac91c0c
--- /dev/null
+++ b/TAO/tests/Object_Loader/Test.idl
@@ -0,0 +1,14 @@
+//
+// $Id$
+//
+
+interface Test
+{
+ // = TITLE
+ // A simple interface to test the Object Loading features in the
+ // ORB.
+
+ long instance_count ();
+
+ void destroy ();
+};
diff --git a/TAO/tests/Object_Loader/Test_DLL.dsp b/TAO/tests/Object_Loader/Test_DLL.dsp
new file mode 100644
index 00000000000..efa22d5646e
--- /dev/null
+++ b/TAO/tests/Object_Loader/Test_DLL.dsp
@@ -0,0 +1,234 @@
+# Microsoft Developer Studio Project File - Name="Test_DLL" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=Test_DLL - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Test_DLL.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Test_DLL.mak" CFG="Test_DLL - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Test_DLL - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Test_DLL - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Test_DLL - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\.." /D OLT_HAS_DLL=1 /D "OLT_BUILD_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 TAO.lib ace.lib /nologo /subsystem:windows /dll /machine:I386 /out:"..\..\..\bin\Test_DLL.dll" /libpath:"..\..\tao" /libpath:"..\..\..\ace"
+
+!ELSEIF "$(CFG)" == "Test_DLL - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\.." /I "..\..\.." /D OLT_HAS_DLL=1 /D "OLT_BUILD_DLL" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 TAOd.lib aced.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"..\..\..\bin\Test_DLLd.dll" /pdbtype:sept /libpath:"..\..\tao" /libpath:"..\..\..\ace"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Test_DLL - Win32 Release"
+# Name "Test_DLL - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter ".cpp"
+# Begin Source File
+
+SOURCE=.\Loader.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Test_i.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestC.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestS.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter ".h"
+# Begin Source File
+
+SOURCE=.\Loader.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OLT_Export.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Test_i.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestC.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestS.h
+# End Source File
+# End Group
+# Begin Group "Inline Files"
+
+# PROP Default_Filter ".i"
+# Begin Source File
+
+SOURCE=.\TestC.i
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestS.i
+# End Source File
+# End Group
+# Begin Group "IDL Files"
+
+# PROP Default_Filter "idl"
+# Begin Source File
+
+SOURCE=.\Test.idl
+
+!IF "$(CFG)" == "Test_DLL - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build
+InputPath=.\Test.idl
+InputName=Test
+
+BuildCmds= \
+ ..\..\..\bin\Release\tao_idl -Ge 1 -Wb,export_macro=OLT_Export -Wb,export_include=OLT_Export.h $(InputName).idl
+
+"$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "Test_DLL - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build
+InputPath=.\Test.idl
+InputName=Test
+
+BuildCmds= \
+ ..\..\..\bin\tao_idl -Ge 1 -Wb,export_macro=OLT_Export -Wb,export_include=OLT_Export.h $(InputName).idl
+
+"$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/tests/Object_Loader/Test_i.cpp b/TAO/tests/Object_Loader/Test_i.cpp
new file mode 100644
index 00000000000..c0c6e851de7
--- /dev/null
+++ b/TAO/tests/Object_Loader/Test_i.cpp
@@ -0,0 +1,45 @@
+// $Id$
+
+#include "Test_i.h"
+
+#if !defined(__ACE_INLINE__)
+#include "Test_i.i"
+#endif /* __ACE_INLINE__ */
+
+ACE_RCSID(Object_Loader, Test_i, "$Id$")
+
+CORBA::Long
+Test_i::instance_count_ = 0;
+
+Test_i::Test_i (PortableServer::POA_ptr poa)
+ : poa_ (PortableServer::POA::_duplicate (poa))
+{
+ Test_i::instance_count_++;
+}
+
+CORBA::Long
+Test_i::instance_count (CORBA::Environment &)
+ ACE_THROW_SPEC (())
+{
+ return Test_i::instance_count_;
+}
+
+void
+Test_i::destroy (CORBA::Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC (())
+{
+ PortableServer::POA_var poa =
+ this->_default_POA (ACE_TRY_ENV);
+ PortableServer::ObjectId_var oid =
+ poa->servant_to_id (this, ACE_TRY_ENV);
+ ACE_CHECK;
+ poa->deactivate_object (oid.in (), ACE_TRY_ENV);
+ ACE_CHECK;
+}
+
+PortableServer::POA_ptr
+Test_i::_default_POA (CORBA::Environment &)
+ ACE_THROW_SPEC (())
+{
+ return PortableServer::POA::_duplicate (this->poa_.in ());
+}
diff --git a/TAO/tests/Object_Loader/Test_i.h b/TAO/tests/Object_Loader/Test_i.h
new file mode 100644
index 00000000000..8144ff18c87
--- /dev/null
+++ b/TAO/tests/Object_Loader/Test_i.h
@@ -0,0 +1,53 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO/tests/Object_Loader
+//
+// = FILENAME
+// Test_i.h
+//
+// = AUTHOR
+// Carlos O'Ryan
+//
+// ============================================================================
+
+#ifndef TAO_OBJECT_LOADER_TEST_I_H
+#define TAO_OBJECT_LOADER_TEST_I_H
+
+#include "TestS.h"
+#include "OLT_Export.h"
+
+class OLT_Export Test_i : public POA_Test
+{
+ // = TITLE
+ // Implement the Test interface
+ //
+ // = DESCRIPTION
+ //
+public:
+ Test_i (PortableServer::POA_ptr poa);
+ // ctor
+
+ CORBA::Long instance_count (CORBA::Environment &)
+ ACE_THROW_SPEC (());
+
+ void destroy (CORBA::Environment &)
+ ACE_THROW_SPEC (());
+
+ PortableServer::POA_ptr _default_POA (CORBA::Environment &)
+ ACE_THROW_SPEC (());
+
+private:
+ PortableServer::POA_var poa_;
+ // The default POA used for this object
+
+ static CORBA::Long instance_count_;
+};
+
+#if defined(__ACE_INLINE__)
+#include "Test_i.i"
+#endif /* __ACE_INLINE__ */
+
+#endif /* TAO_OBJECT_LOADER_TEST_I_H */
diff --git a/TAO/tests/Object_Loader/Test_i.i b/TAO/tests/Object_Loader/Test_i.i
new file mode 100644
index 00000000000..cfa1da318d3
--- /dev/null
+++ b/TAO/tests/Object_Loader/Test_i.i
@@ -0,0 +1 @@
+// $Id$
diff --git a/TAO/tests/Object_Loader/driver.cpp b/TAO/tests/Object_Loader/driver.cpp
new file mode 100644
index 00000000000..a1597259bd8
--- /dev/null
+++ b/TAO/tests/Object_Loader/driver.cpp
@@ -0,0 +1,74 @@
+//
+// $Id$
+//
+
+#include "TestCli.h"
+
+int
+main (int, char *[])
+{
+ int niterations = 1000;
+ int norbs = 10;
+
+ ACE_TRY_NEW_ENV
+ {
+ for (int i = 0; i != niterations; ++i)
+ {
+ for (int j = 0; j != norbs; ++j)
+ {
+ char buf[16];
+ ACE_OS::sprintf (buf, "ORB_%4.4d", j);
+
+ int argc = 0;
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, 0, buf, ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var object =
+ orb->string_to_object ("DLL:Test_Object",
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ Test_var test =
+ Test::_narrow (object.in (), ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ CORBA::Long count =
+ test->instance_count (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ if (count != norbs*i + j + 1)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Incorrect number of objects "
+ "(%d != %d)\n",
+ count, norbs * i + j + 1));
+ }
+ test->destroy (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ }
+ }
+
+ for (int j = 0; j != 10; ++j)
+ {
+ char buf[16];
+ ACE_OS::sprintf (buf, "%4.4d", j);
+
+ int argc = 0;
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, 0, buf, ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ orb->destroy (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ }
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "main()");
+ return 1;
+ }
+ ACE_ENDTRY;
+ return 0;
+}
diff --git a/TAO/tests/Object_Loader/driver.dsp b/TAO/tests/Object_Loader/driver.dsp
new file mode 100644
index 00000000000..020c31c7f9c
--- /dev/null
+++ b/TAO/tests/Object_Loader/driver.dsp
@@ -0,0 +1,208 @@
+# Microsoft Developer Studio Project File - Name="Object_Loader Driver" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Object_Loader Driver - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "driver.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "driver.mak" CFG="Object_Loader Driver - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Object_Loader Driver - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Object_Loader Driver - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Object_Loader Driver - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\.." /I "..\.." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 tao.lib ace.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\ace" /libpath:"..\..\tao"
+
+!ELSEIF "$(CFG)" == "Object_Loader Driver - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\.." /I "..\.." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 taod.lib aced.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\ace" /libpath:"..\..\tao"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Object_Loader Driver - Win32 Release"
+# Name "Object_Loader Driver - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter ".cpp"
+# Begin Source File
+
+SOURCE=.\driver.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestCli.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestSer.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h"
+# Begin Source File
+
+SOURCE=.\TestCli.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestSer.h
+# End Source File
+# End Group
+# Begin Group "IDL Files"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\Test.idl
+
+!IF "$(CFG)" == "Object_Loader Driver - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+USERDEP__TEST_="..\..\..\bin\Release\tao_idl.exe"
+# Begin Custom Build - Invoking TAO_IDL Compiler
+InputPath=.\Test.idl
+InputName=Test
+
+BuildCmds= \
+ ..\..\..\bin\Release\tao_idl -Ge 1 $(InputName).idl
+
+"$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "Object_Loader Driver - Win32 Debug"
+
+USERDEP__TEST_="..\..\..\bin\tao_idl.exe"
+# Begin Custom Build - Invoking TAO_IDL Compiler
+InputPath=.\Test.idl
+InputName=Test
+
+BuildCmds= \
+ ..\..\..\bin\tao_idl -Ge 1 -hc Cli.h -cs Cli.cpp -ci Cli.i -hs Ser.h -ss Ser.cpp -si Ser.i -hT Ser_T.h -sT Ser_T.cpp -st Ser_T.i $(InputName).idl
+
+"$(InputName)Cli.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)Cli.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)Ccli.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)Ser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)Ser.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)Ser.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)Ser_T.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)Ser_T.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)Ser_T.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# Begin Group "Inline Files"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\TestCli.i
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/tests/Object_Loader/svc.conf b/TAO/tests/Object_Loader/svc.conf
new file mode 100644
index 00000000000..2411a176ec7
--- /dev/null
+++ b/TAO/tests/Object_Loader/svc.conf
@@ -0,0 +1,7 @@
+#
+# $Id$
+#
+dynamic Test_Object Service_Object * Test_DLL:_make_Loader()
+
+
+