public Object CreateObject(DelegationImpl delegationImpl) { Object delegateClass = null; try { log.Debug("creating delegate '" + delegationImpl.ClassName + "'"); if (delegationImpl.ClassName.IndexOf(",") != -1) { int index = delegationImpl.ClassName.IndexOf(","); string className = delegationImpl.ClassName.Substring(0, index).Trim(); string assemblyName = delegationImpl.ClassName.Substring(index + 1).Trim(); DbSession dbSession = null; AssemblyFileImpl assemblyFile = null; try { dbSession = OpenSession(); Object[] args = new Object[] { delegationImpl.ProcessDefinition.Id, assemblyName }; IType[] types = new IType[] { DbType.LONG, DbType.STRING }; assemblyFile = (AssemblyFileImpl)dbSession.FindOne(queryFindAssemblyFile, args, types); } catch (ObjectNotFoundException) {} finally { if (dbSession != null) { dbSession.Close(); } } if (assemblyFile != null) { Assembly loaded = Assembly.Load(assemblyFile.Bytes); Type dbDelegationType = loaded.GetType(className); delegateClass = Activator.CreateInstance(dbDelegationType, false); return(delegateClass); } } //load Assembly from environment log.Debug("load Assembly from environment"); Type delegationType = Type.GetType(delegationImpl.ClassName); delegateClass = Activator.CreateInstance(delegationType, false); return(delegateClass); } catch (Exception t) { log.Error("can't instantiate delegate '" + delegationImpl.ClassName + "' : ", t); throw new SystemException("can't instantiate delegate '" + delegationImpl.ClassName + "' : " + t.Message); } }
public virtual ISet GetAssemblyFiles(ProcessDefinitionBuildContext creationContext, IProcessDefinition processDefinition) { ISet classFiles = new HashedSet(); IDictionary <string, byte[]> entries = creationContext.Entries; IEnumerator iter = entries.Keys.GetEnumerator(); while (iter.MoveNext()) { String entryName = (String)iter.Current; if ((entryName.StartsWith("lib")) && (entryName.EndsWith(".dll"))) { if (log.IsDebugEnabled) { log.Debug("attaching assembly file " + entryName); } byte[] classBytes = (byte[])entries[entryName]; if (log.IsDebugEnabled) { log.Debug("found assembly " + entryName); } Assembly assemply = Assembly.Load(classBytes); if (log.IsDebugEnabled) { log.Debug("attaching assembly name: " + assemply.GetName().Name + " Version:" + assemply.GetName().Version.ToString()); } AssemblyFileImpl assemblyFile = new AssemblyFileImpl(); assemblyFile.FileName = entryName; assemblyFile.Bytes = classBytes; assemblyFile.AssemblyName = assemply.GetName().Name; assemblyFile.AssemblyVersion = assemply.GetName().Version.ToString(); assemblyFile.ProcessDefinition = processDefinition; classFiles.Add(assemblyFile); } } return(classFiles); }