Author: jgomes
Date: Wed Nov 19 17:24:10 2008
New Revision: 719149
URL: http://svn.apache.org/viewvc?rev=719149&view=rev
Log:
Refactor NMSConnectionFactory to search for the config file and provider
assemblies in the following folder order:
1. Current folder.
2. Current executing assembly location folder.
3. AppDomain.CurrentDomain.BaseDirectory folder.
4. AppDomain.CurrentDomain.RelativeSearchPath folder.
This will help support ASP.NET and running as a service. This change is based
on a patch submitted by Daniel Ellis. Thanks, Dan!
Modified:
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/NMSConnectionFactory.cs
Modified:
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/NMSConnectionFactory.cs
URL:
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/NMSConnectionFactory.cs?rev=719149&r1=719148&r2=719149&view=diff
==============================================================================
---
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/NMSConnectionFactory.cs
(original)
+++
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/NMSConnectionFactory.cs
Wed Nov 19 17:24:10 2008
@@ -97,18 +97,25 @@
/// <returns></returns>
private static Type GetTypeForScheme(string scheme)
{
+ string[] paths = GetConfigSearchPaths();
string assemblyFileName;
string factoryClassName;
Type factoryType = null;
- if(LookupConnectionFactoryInfo(scheme, out
assemblyFileName, out factoryClassName))
+ if(LookupConnectionFactoryInfo(paths, scheme, out
assemblyFileName, out factoryClassName))
{
-#if NETCF
- string assemblyFolder = "";
-#else
- string assemblyFolder =
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
-#endif
- Assembly assembly =
Assembly.LoadFrom(Path.Combine(assemblyFolder, assemblyFileName));
+ Assembly assembly = null;
+
+ foreach(string path in paths)
+ {
+ string fullpath = Path.Combine(path,
assemblyFileName);
+
+ if(File.Exists(fullpath))
+ {
+ assembly =
Assembly.LoadFrom(fullpath);
+ break;
+ }
+ }
if(null != assembly)
{
@@ -140,48 +147,78 @@
/// jms://localhost:7222
///
/// </summary>
+ /// <param name="paths">Folder paths to look in.</param>
/// <param name="scheme"></param>
/// <param name="assemblyFileName"></param>
/// <param name="factoryClassName"></param>
/// <returns></returns>
- private static bool LookupConnectionFactoryInfo(string scheme,
out string assemblyFileName, out string factoryClassName)
+ private static bool LookupConnectionFactoryInfo(string[] paths,
string scheme, out string assemblyFileName, out string factoryClassName)
{
-#if NETCF
- string assemblyFolder = "";
-#else
- string assemblyFolder =
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
-#endif
- string configFileName = Path.Combine(assemblyFolder,
String.Format("nmsprovider-{0}.config", scheme.ToLower()));
+ string configFileName =
String.Format("nmsprovider-{0}.config", scheme.ToLower());
bool foundFactory = false;
assemblyFileName = String.Empty;
factoryClassName = String.Empty;
- try
+ foreach(string path in paths)
{
- if(File.Exists(configFileName))
+ string fullpath = Path.Combine(path,
configFileName);
+
+ try
{
- XmlDocument configDoc = new
XmlDocument();
+ if(File.Exists(fullpath))
+ {
+ XmlDocument configDoc = new
XmlDocument();
- configDoc.Load(configFileName);
- XmlElement providerNode = (XmlElement)
configDoc.SelectSingleNode("/configuration/provider");
+ configDoc.Load(fullpath);
+ XmlElement providerNode =
(XmlElement) configDoc.SelectSingleNode("/configuration/provider");
- if(null != providerNode)
- {
- assemblyFileName =
providerNode.GetAttribute("assembly");
- factoryClassName =
providerNode.GetAttribute("classFactory");
- if(String.Empty !=
assemblyFileName && String.Empty != factoryClassName)
+ if(null != providerNode)
{
- foundFactory = true;
+ assemblyFileName =
providerNode.GetAttribute("assembly");
+ factoryClassName =
providerNode.GetAttribute("classFactory");
+ if(String.Empty !=
assemblyFileName && String.Empty != factoryClassName)
+ {
+ foundFactory =
true;
+ break;
+ }
}
}
}
+ catch
+ {
+ }
+ }
+
+ return foundFactory;
+ }
+
+ /// <summary>
+ /// Get an array of search paths to look for config files.
+ /// </summary>
+ private static string[] GetConfigSearchPaths()
+ {
+ ArrayList pathList = new ArrayList();
+
+ // Check the current folder first.
+ pathList.Add("");
+#if !NETCF
+ AppDomain currentDomain = AppDomain.CurrentDomain;
+
+ // Check the folder the assembly is located in.
+
pathList.Add(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
+ if(null != currentDomain.BaseDirectory)
+ {
+ pathList.Add(currentDomain.BaseDirectory);
}
- catch
+
+ if(null != currentDomain.RelativeSearchPath)
{
+ pathList.Add(currentDomain.RelativeSearchPath);
}
+#endif
- return foundFactory;
+ return (string[]) pathList.ToArray(typeof(string));
}
/// <summary>