Make the service loader pump out the error to the log (in red) and include the dll/interface/args that caused the problem
This gives people more of a fighting chance of finding out what went wrongslimupdates
parent
304c626824
commit
296c68a9de
|
@ -26,7 +26,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using log4net;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using OpenSim.Services.Interfaces;
|
using OpenSim.Services.Interfaces;
|
||||||
|
|
||||||
|
@ -34,6 +36,8 @@ namespace OpenSim.Services.Base
|
||||||
{
|
{
|
||||||
public class ServiceBase
|
public class ServiceBase
|
||||||
{
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
public T LoadPlugin<T>(string dllName) where T:class
|
public T LoadPlugin<T>(string dllName) where T:class
|
||||||
{
|
{
|
||||||
return LoadPlugin<T>(dllName, new Object[0]);
|
return LoadPlugin<T>(dllName, new Object[0]);
|
||||||
|
@ -61,8 +65,12 @@ namespace OpenSim.Services.Base
|
||||||
{
|
{
|
||||||
Assembly pluginAssembly = Assembly.LoadFrom(dllName);
|
Assembly pluginAssembly = Assembly.LoadFrom(dllName);
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[SERVICE BASE]: Found assembly {0}", dllName);
|
||||||
|
|
||||||
foreach (Type pluginType in pluginAssembly.GetTypes())
|
foreach (Type pluginType in pluginAssembly.GetTypes())
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[SERVICE BASE]: Found type {0}", pluginType);
|
||||||
|
|
||||||
if (pluginType.IsPublic)
|
if (pluginType.IsPublic)
|
||||||
{
|
{
|
||||||
if (className != String.Empty &&
|
if (className != String.Empty &&
|
||||||
|
@ -86,7 +94,15 @@ namespace OpenSim.Services.Base
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Console.WriteLine("XXX Exception " + e.StackTrace);
|
List<string> strArgs = new List<string>();
|
||||||
|
foreach (Object arg in args)
|
||||||
|
strArgs.Add(arg.ToString());
|
||||||
|
|
||||||
|
m_log.Error(
|
||||||
|
string.Format(
|
||||||
|
"[SERVICE BASE]: Failed to load plugin {0} from {1} with args {2}",
|
||||||
|
interfaceName, dllName, string.Join(", ", strArgs.ToArray())), e);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,13 +27,12 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using log4net;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Data;
|
using OpenSim.Data;
|
||||||
using OpenSim.Services.Interfaces;
|
using OpenSim.Services.Interfaces;
|
||||||
using OpenSim.Services.Base;
|
using OpenSim.Services.Base;
|
||||||
using Nini.Config;
|
|
||||||
using log4net;
|
|
||||||
|
|
||||||
namespace OpenSim.Services.Friends
|
namespace OpenSim.Services.Friends
|
||||||
{
|
{
|
||||||
|
@ -80,7 +79,11 @@ namespace OpenSim.Services.Friends
|
||||||
|
|
||||||
m_Database = LoadPlugin<IFriendsData>(dllName, new Object[] { connString, realm });
|
m_Database = LoadPlugin<IFriendsData>(dllName, new Object[] { connString, realm });
|
||||||
if (m_Database == null)
|
if (m_Database == null)
|
||||||
throw new Exception("Could not find a storage interface in the given module");
|
{
|
||||||
|
throw new Exception(
|
||||||
|
string.Format(
|
||||||
|
"Could not find a storage interface {0} in the given StorageProvider {1}", "IFriendsData", dllName));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue