You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by sh...@apache.org on 2008/10/26 02:04:32 UTC
svn commit: r707924 - in /incubator/qpid/trunk/qpid/cpp/src: Makefile.am
qpid/Modules.cpp qpid/Modules.h qpid/client/LoadPlugins.cpp
Author: shuston
Date: Sat Oct 25 18:04:32 2008
New Revision: 707924
URL: http://svn.apache.org/viewvc?rev=707924&view=rev
Log:
Refactor duplicated Module-handling from broker/client to common
Added:
incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.cpp (with props)
incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.h (with props)
Modified:
incubator/qpid/trunk/qpid/cpp/src/Makefile.am
incubator/qpid/trunk/qpid/cpp/src/qpid/client/LoadPlugins.cpp
Modified: incubator/qpid/trunk/qpid/cpp/src/Makefile.am
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/Makefile.am?rev=707924&r1=707923&r2=707924&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/Makefile.am (original)
+++ incubator/qpid/trunk/qpid/cpp/src/Makefile.am Sat Oct 25 18:04:32 2008
@@ -235,6 +235,7 @@
qpid/Address.cpp \
qpid/DataDir.cpp \
qpid/Exception.cpp \
+ qpid/Modules.cpp \
qpid/Options.cpp \
qpid/Plugin.cpp \
qpid/RefCountedBuffer.h \
@@ -414,6 +415,7 @@
qpid/Exception.h \
qpid/sys/ExceptionHolder.h \
qpid/amqp_0_10/Exception.h \
+ qpid/Modules.h \
qpid/Msg.h \
qpid/Options.h \
qpid/Plugin.h \
Added: incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.cpp?rev=707924&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.cpp (added)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.cpp Sat Oct 25 18:04:32 2008
@@ -0,0 +1,74 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+
+#include "Modules.h"
+#include "Exception.h"
+#include "qpid/log/Statement.h"
+#include "qpid/sys/Shlib.h"
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
+
+namespace fs=boost::filesystem;
+
+namespace qpid {
+
+ModuleOptions::ModuleOptions(const std::string& defaultModuleDir)
+ : qpid::Options("Module options"), loadDir(defaultModuleDir), noLoad(false)
+{
+ addOptions()
+ ("module-dir", optValue(loadDir, "DIR"), "Load all shareable modules in this directory")
+ ("load-module", optValue(load, "FILE"), "Specifies additional module(s) to be loaded")
+ ("no-module-dir", optValue(noLoad), "Don't load modules from module directory");
+}
+
+void tryShlib(const char* libname, bool noThrow) {
+ try {
+ sys::Shlib shlib(libname);
+ QPID_LOG (info, "Loaded Module: " << libname);
+ }
+ catch (const std::exception& /*e*/) {
+ if (!noThrow)
+ throw;
+ }
+}
+
+void loadModuleDir (std::string dirname, bool isDefault)
+{
+ fs::path dirPath (dirname, fs::native);
+
+ if (!fs::exists (dirPath))
+ {
+ if (isDefault)
+ return;
+ throw Exception ("Directory not found: " + dirname);
+ }
+
+ fs::directory_iterator endItr;
+ for (fs::directory_iterator itr (dirPath); itr != endItr; ++itr)
+ {
+ if (!fs::is_directory(*itr) &&
+ itr->string().find (".so") == itr->string().length() - 3)
+ tryShlib (itr->string().data(), true);
+ }
+}
+
+} // namespace qpid
Propchange: incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.cpp
------------------------------------------------------------------------------
svn:keywords =
Added: incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.h?rev=707924&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.h (added)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.h Sat Oct 25 18:04:32 2008
@@ -0,0 +1,43 @@
+#ifndef QPID_MODULES_H
+#define QPID_MODULES_H
+
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+
+#include "Options.h"
+#include <string>
+#include <vector>
+
+namespace qpid {
+
+struct ModuleOptions : public qpid::Options {
+ std::string loadDir;
+ std::vector<std::string> load;
+ bool noLoad;
+ ModuleOptions(const std::string& defaultModuleDir);
+};
+
+void tryShlib(const char* libname, bool noThrow);
+void loadModuleDir (std::string dirname, bool isDefault);
+
+} // namespace qpid
+
+#endif /*!QPID_MODULES_H*/
Propchange: incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.h
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/qpid/trunk/qpid/cpp/src/qpid/Modules.h
------------------------------------------------------------------------------
svn:keywords =
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/LoadPlugins.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/LoadPlugins.cpp?rev=707924&r1=707923&r2=707924&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/LoadPlugins.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/LoadPlugins.cpp Sat Oct 25 18:04:32 2008
@@ -18,78 +18,32 @@
* under the License.
*
*/
-#include "qpid/log/Statement.h"
-#include "qpid/log/Options.h"
-#include "qpid/log/Logger.h"
-#include "qpid/sys/Shlib.h"
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
-
-using namespace qpid;
-using namespace qpid::sys;
-using namespace qpid::log;
-using namespace std;
-namespace fs=boost::filesystem;
-
-struct ModuleOptions : public qpid::Options {
- string loadDir;
- vector<string> load;
- bool noLoad;
- ModuleOptions() : qpid::Options("Module options"), loadDir(MODULE_DIR), noLoad(false)
- {
- addOptions()
- ("module-dir", optValue(loadDir, "DIR"), "Load all .so modules in this directory")
- ("load-module", optValue(load, "FILE"), "Specifies additional module(s) to be loaded")
- ("no-module-dir", optValue(noLoad), "Don't load modules from module directory");
- }
-};
-
-// TODO: The following is copied from qpidd.cpp - it needs to be common code
-void tryShlib(const char* libname, bool noThrow) {
- try {
- Shlib shlib(libname);
- QPID_LOG (info, "Loaded Module: " << libname);
- }
- catch (const exception& e) {
- if (!noThrow)
- throw;
- }
-}
-
-void loadModuleDir (string dirname, bool isDefault)
-{
- fs::path dirPath (dirname, fs::native);
- if (!fs::exists (dirPath))
- {
- if (isDefault)
- return;
- throw Exception ("Directory not found: " + dirname);
- }
+#include "qpid/Modules.h"
+#include "qpid/sys/Shlib.h"
+#include <string>
+#include <vector>
+using std::vector;
+using std::string;
- fs::directory_iterator endItr;
- for (fs::directory_iterator itr (dirPath); itr != endItr; ++itr)
- {
- if (!fs::is_directory(*itr) &&
- itr->string().find (".so") == itr->string().length() - 3)
- tryShlib (itr->string().data(), true);
- }
-}
+namespace {
struct LoadtimeInitialise {
LoadtimeInitialise() {
- ModuleOptions moduleOptions;
- string defaultPath (moduleOptions.loadDir);
+ qpid::ModuleOptions moduleOptions(MODULE_DIR);
+ string defaultPath (moduleOptions.loadDir);
moduleOptions.parse (0, 0, CONF_FILE, true);
for (vector<string>::iterator iter = moduleOptions.load.begin();
iter != moduleOptions.load.end();
iter++)
- tryShlib (iter->data(), false);
+ qpid::tryShlib (iter->data(), false);
if (!moduleOptions.noLoad) {
bool isDefault = defaultPath == moduleOptions.loadDir;
- loadModuleDir (moduleOptions.loadDir, isDefault);
+ qpid::loadModuleDir (moduleOptions.loadDir, isDefault);
}
}
} init;
+
+} // namespace