You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by da...@apache.org on 2004/04/08 15:18:51 UTC
cvs commit: ws-axis/c/src/engine HandlerLoader.cpp
damitha 2004/04/08 06:18:51
Modified: c/src/engine HandlerLoader.cpp
Log:
replaced indent tabs with spaces; added apache 2 licence.
Revision Changes Path
1.23 +184 -209 ws-axis/c/src/engine/HandlerLoader.cpp
Index: HandlerLoader.cpp
===================================================================
RCS file: /home/cvs/ws-axis/c/src/engine/HandlerLoader.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- HandlerLoader.cpp 24 Mar 2004 06:57:32 -0000 1.22
+++ HandlerLoader.cpp 8 Apr 2004 13:18:51 -0000 1.23
@@ -1,60 +1,18 @@
/* -*- C++ -*- */
-
/*
- * The Apache Software License, Version 1.1
- *
- *
- * Copyright (c) 2002 The Apache Software Foundation. All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgment:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself,
- * if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "SOAP" and "Apache Software Foundation" must
- * not be used to endorse or promote products derived from this
- * software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- * nor may "Apache" appear in their name, without prior written
- * permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
+ * Copyright 2003-2004 The Apache Software Foundation.
*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
*
* @author Susantha Kumara (skumara@virtusa.com)
@@ -62,7 +20,7 @@
*
*/
#ifdef WIN32
-#pragma warning (disable : 4390) //empty controlled statement found;
+#pragma warning (disable : 4390) // empty controlled statement found;
#endif
#include "HandlerLoader.h"
@@ -74,184 +32,201 @@
extern WSDDDeployment* g_pWSDDDeployment;
-HandlerLoader::HandlerLoader()
+HandlerLoader::HandlerLoader ()
{
#if defined(USE_LTDL)
- lt_dlinit();
+ lt_dlinit ();
#endif
}
-HandlerLoader::~HandlerLoader()
+HandlerLoader::~HandlerLoader ()
{
- lock();
- HandlerInformation* pHandlerInfo = NULL;
- for (map<int, HandlerInformation*>::iterator it = m_HandlerInfoList.begin(); it != m_HandlerInfoList.end(); it++)
- {
- pHandlerInfo = (*it).second;
- if (pHandlerInfo->m_nObjCount != 0); //it seems that some objects created have not been deleted - unexpected
- UnloadLib(pHandlerInfo);
- delete pHandlerInfo;
- }
- unlock();
- #if defined(US_LTDL)
- lt_dlexit();
- #endif
+ lock ();
+ HandlerInformation* pHandlerInfo = NULL;
+ for (map < int, HandlerInformation* >::iterator it =
+ m_HandlerInfoList.begin (); it != m_HandlerInfoList.end (); it++)
+ {
+ pHandlerInfo = (*it).second;
+ if (pHandlerInfo->m_nObjCount != 0); /* It seems that some objects
+ * created have not been deleted
+ * - unexpected
+ */
+ UnloadLib (pHandlerInfo);
+ delete pHandlerInfo;
+ }
+ unlock ();
+#if defined(US_LTDL)
+ lt_dlexit ();
+#endif
}
-int HandlerLoader::DeleteHandler(BasicHandler* pHandler, int nLibId)
+int HandlerLoader::DeleteHandler (BasicHandler* pHandler, int nLibId)
{
- lock();
- if (m_HandlerInfoList.find(nLibId) != m_HandlerInfoList.end())
- {
- HandlerInformation* pHandlerInfo = m_HandlerInfoList[nLibId];
- pHandlerInfo->m_nObjCount--;
- pHandlerInfo->m_Delete(pHandler);
- if (pHandlerInfo->m_nObjCount == 0); //time to unload the DLL
- unlock();
- return AXIS_SUCCESS;
- }
- else
- {
- unlock();
- return HANDLER_NOT_LOADED;
- }
+ lock ();
+ if (m_HandlerInfoList.find (nLibId) != m_HandlerInfoList.end ())
+ {
+ HandlerInformation* pHandlerInfo = m_HandlerInfoList[nLibId];
+ pHandlerInfo->m_nObjCount--;
+ pHandlerInfo->m_Delete (pHandler);
+ if (pHandlerInfo->m_nObjCount == 0); //time to unload the DLL
+ unlock ();
+ return AXIS_SUCCESS;
+ }
+ else
+ {
+ unlock ();
+ return HANDLER_NOT_LOADED;
+ }
}
-int HandlerLoader::LoadLib(HandlerInformation* pHandlerInfo)
-{
+int HandlerLoader::LoadLib (HandlerInformation* pHandlerInfo)
+{
//#ifdef WIN32
#if defined(USE_LTDL)
- pHandlerInfo->m_Handler = lt_dlopen(pHandlerInfo->m_sLib.c_str());
- if(!pHandlerInfo->m_Handler)
- {
- printf("DLOPEN FAILED: %s\n", lt_dlerror());
- }
+ pHandlerInfo->m_Handler = lt_dlopen (pHandlerInfo->m_sLib.c_str ());
+ if (!pHandlerInfo->m_Handler)
+ {
+ printf ("DLOPEN FAILED: %s\n", lt_dlerror ());
+ }
#elif defined(WIN32)
- pHandlerInfo->m_Handler = LoadLibrary(pHandlerInfo->m_sLib.c_str());
+ pHandlerInfo->m_Handler = LoadLibrary (pHandlerInfo->m_sLib.c_str ());
#else //Linux
- pHandlerInfo->m_nLoadOptions = RTLD_LAZY;
- pHandlerInfo->m_Handler = dlopen(pHandlerInfo->m_sLib.c_str(), pHandlerInfo->m_nLoadOptions);
- if(!pHandlerInfo->m_Handler)
- {
- printf("DLOPEN FAILED: %s\n", dlerror());
- exit(1);
- }
+ pHandlerInfo->m_nLoadOptions = RTLD_LAZY;
+ pHandlerInfo->m_Handler =
+ dlopen (pHandlerInfo->m_sLib.c_str (), pHandlerInfo->m_nLoadOptions);
+ if (!pHandlerInfo->m_Handler)
+ {
+ printf ("DLOPEN FAILED: %s\n", dlerror ());
+ exit (1);
+ }
#endif
- return (pHandlerInfo->m_Handler != 0)?AXIS_SUCCESS:AXIS_FAIL;
+ return (pHandlerInfo->m_Handler != 0) ? AXIS_SUCCESS : AXIS_FAIL;
}
-int HandlerLoader::UnloadLib(HandlerInformation* pHandlerInfo)
+int HandlerLoader::UnloadLib (HandlerInformation* pHandlerInfo)
{
//#ifdef WIN32
#if defined(USE_LTDL)
- lt_dlclose(pHandlerInfo->m_Handler);
+ lt_dlclose (pHandlerInfo->m_Handler);
#elif defined(WIN32)
- FreeLibrary(pHandlerInfo->m_Handler);
+ FreeLibrary (pHandlerInfo->m_Handler);
#else //Linux
- dlclose(pHandlerInfo->m_Handler);
+ dlclose (pHandlerInfo->m_Handler);
#endif
- return AXIS_SUCCESS;
+ return AXIS_SUCCESS;
}
-int HandlerLoader::CreateHandler(BasicHandler** pHandler, int nLibId)
-{
- lock();
- *pHandler = NULL;
- HandlerInformation* pHandlerInfo = NULL;
- if (m_HandlerInfoList.find(nLibId) == m_HandlerInfoList.end())
- {
- pHandlerInfo = new HandlerInformation();
- pHandlerInfo->m_sLib = g_pWSDDDeployment->GetLibName(nLibId);
- if (pHandlerInfo->m_sLib.empty())
- {
- delete pHandlerInfo;
- unlock();
- return LIBRARY_PATH_EMPTY;
- }
- //pHandlerInfo->m_nLoadOptions = RTLD_LAZY;
- if (AXIS_SUCCESS == LoadLib(pHandlerInfo))
- {
- //#ifdef WIN32
- #if defined(USE_LTDL)
- pHandlerInfo->m_Create = (CREATE_OBJECT)lt_dlsym(pHandlerInfo->m_Handler,CREATE_FUNCTION);
- pHandlerInfo->m_Delete = (DELETE_OBJECT)lt_dlsym(pHandlerInfo->m_Handler,DELETE_FUNCTION);
- #elif defined(WIN32)
- pHandlerInfo->m_Create = (CREATE_OBJECT)GetProcAddress(pHandlerInfo->m_Handler,CREATE_FUNCTION);
- pHandlerInfo->m_Delete = (DELETE_OBJECT)GetProcAddress(pHandlerInfo->m_Handler,DELETE_FUNCTION);
- #else //Linux
- pHandlerInfo->m_Create = (CREATE_OBJECT)dlsym(pHandlerInfo->m_Handler,CREATE_FUNCTION);
- pHandlerInfo->m_Delete = (DELETE_OBJECT)dlsym(pHandlerInfo->m_Handler,DELETE_FUNCTION);
- #endif
- if (!pHandlerInfo->m_Create || !pHandlerInfo->m_Delete)
- {
- UnloadLib(pHandlerInfo);
- delete pHandlerInfo;
- unlock();
- AXISTRACE1("Library loading failed", CRITICAL);
- return LOADLIBRARY_FAILED;
- }
- else //success
- {
- m_HandlerInfoList[nLibId] = pHandlerInfo;
- }
- }
- else
- {
- unlock();
- AXISTRACE1("Library loading failed", CRITICAL);
- return LOADLIBRARY_FAILED;
- }
- }
-
- pHandlerInfo = m_HandlerInfoList[nLibId];
- BasicHandler* pBH = NULL;
- pHandlerInfo->m_Create(&pBH);
- if (pBH)
- {
- if (0 != pBH->_functions)
- /* this is a C service or handler */
- {
- if (AXIS_SUCCESS == pBH->_functions->Init(pBH->_object))
- {
- pHandlerInfo->m_nObjCount++;
- *pHandler = pBH;
- unlock();
- return AXIS_SUCCESS;
- }
- else
- {
- pBH->_functions->Fini(pBH->_object);
- pHandlerInfo->m_Delete(pBH);
- unlock();
- return HANDLER_INIT_FAIL;
- }
- }
- else if (0 == pBH->_object)
- {
- return CREATION_FAILED;
- }
- else
- /* C++ service or handler */
- {
- if (AXIS_SUCCESS == ((HandlerBase*)pBH->_object)->Init())
- {
- pHandlerInfo->m_nObjCount++;
- *pHandler = pBH;
- unlock();
- return AXIS_SUCCESS;
- }
- else
- {
- ((HandlerBase*)pBH->_object)->Fini();
- pHandlerInfo->m_Delete(pBH);
- unlock();
- return HANDLER_INIT_FAIL;
- }
- }
- }
- else
- {
- unlock();
- return CREATION_FAILED;
- }
+int HandlerLoader::CreateHandler (BasicHandler** pHandler, int nLibId)
+{
+ lock ();
+ *pHandler = NULL;
+ HandlerInformation* pHandlerInfo = NULL;
+ if (m_HandlerInfoList.find (nLibId) == m_HandlerInfoList.end ())
+ {
+ pHandlerInfo = new HandlerInformation ();
+ pHandlerInfo->m_sLib = g_pWSDDDeployment->GetLibName (nLibId);
+ if (pHandlerInfo->m_sLib.empty ())
+ {
+ delete pHandlerInfo;
+ unlock ();
+ return LIBRARY_PATH_EMPTY;
+ }
+ // pHandlerInfo->m_nLoadOptions = RTLD_LAZY;
+ if (AXIS_SUCCESS == LoadLib (pHandlerInfo))
+ {
+ //#ifdef WIN32
+#if defined(USE_LTDL)
+ pHandlerInfo->m_Create =
+ (CREATE_OBJECT) lt_dlsym (pHandlerInfo->m_Handler,
+ CREATE_FUNCTION);
+ pHandlerInfo->m_Delete =
+ (DELETE_OBJECT) lt_dlsym (pHandlerInfo->m_Handler,
+ DELETE_FUNCTION);
+#elif defined(WIN32)
+ pHandlerInfo->m_Create =
+ (CREATE_OBJECT) GetProcAddress (pHandlerInfo->m_Handler,
+ CREATE_FUNCTION);
+ pHandlerInfo->m_Delete =
+ (DELETE_OBJECT) GetProcAddress (pHandlerInfo->m_Handler,
+ DELETE_FUNCTION);
+#else //Linux
+ pHandlerInfo->m_Create =
+ (CREATE_OBJECT) dlsym (pHandlerInfo->m_Handler,
+ CREATE_FUNCTION);
+ pHandlerInfo->m_Delete =
+ (DELETE_OBJECT) dlsym (pHandlerInfo->m_Handler,
+ DELETE_FUNCTION);
+#endif
+ if (!pHandlerInfo->m_Create || !pHandlerInfo->m_Delete)
+ {
+ UnloadLib (pHandlerInfo);
+ delete pHandlerInfo;
+ unlock ();
+ AXISTRACE1 ("Library loading failed", CRITICAL);
+ return LOADLIBRARY_FAILED;
+ }
+ else // success
+ {
+ m_HandlerInfoList[nLibId] = pHandlerInfo;
+ }
+ }
+ else
+ {
+ unlock ();
+ AXISTRACE1 ("Library loading failed", CRITICAL);
+ return LOADLIBRARY_FAILED;
+ }
+ }
+
+ pHandlerInfo = m_HandlerInfoList[nLibId];
+ BasicHandler* pBH = NULL;
+ pHandlerInfo->m_Create (&pBH);
+ if (pBH)
+ {
+ if (0 != pBH->_functions)
+ /* this is a C service or handler */
+ {
+ if (AXIS_SUCCESS == pBH->_functions->Init (pBH->_object))
+ {
+ pHandlerInfo->m_nObjCount++;
+ *pHandler = pBH;
+ unlock ();
+ return AXIS_SUCCESS;
+ }
+ else
+ {
+ pBH->_functions->Fini (pBH->_object);
+ pHandlerInfo->m_Delete (pBH);
+ unlock ();
+ return HANDLER_INIT_FAIL;
+ }
+ }
+ else if (0 == pBH->_object)
+ {
+ return CREATION_FAILED;
+ }
+ else
+ /* C++ service or handler */
+ {
+ if (AXIS_SUCCESS == ((HandlerBase*) pBH->_object)->Init ())
+ {
+ pHandlerInfo->m_nObjCount++;
+ *pHandler = pBH;
+ unlock ();
+ return AXIS_SUCCESS;
+ }
+ else
+ {
+ ((HandlerBase*) pBH->_object)->Fini ();
+ pHandlerInfo->m_Delete (pBH);
+ unlock ();
+ return HANDLER_INIT_FAIL;
+ }
+ }
+ }
+ else
+ {
+ unlock ();
+ return CREATION_FAILED;
+ }
}