public synchronized CoreWrapper<K> getCoreWrapper( Class<K> coreKlazz , ClassDefinition coreDef ) { if ( wrapperCache == null ) { wrapperCache = new HashMap<Class, Class<? extends CoreWrapper<?>>>(); } Class<? extends CoreWrapper<K>> wrapperClass = null; if ( wrapperCache.containsKey( coreKlazz ) ) { wrapperClass = (Class<? extends CoreWrapper<K>>) wrapperCache.get( coreKlazz ); } else { try { wrapperClass = buildCoreWrapper( coreKlazz, coreDef ); } catch (IOException e) { return null; } catch (ClassNotFoundException e) { return null; } wrapperCache.put( coreKlazz, wrapperClass ); } try { ruleBase.getTraitRegistry().addTraitable( buildClassDefinition( coreKlazz, wrapperClass ) ); return wrapperClass != null ? wrapperClass.newInstance() : null; } catch (InstantiationException e) { return null; } catch (IllegalAccessException e) { return null; } catch (IOException e) { return null; } }
public void dispose() { Iterator iter = statefulSessions.iterator(); for ( Object o = iter.next(); o != null; o = iter.next() ) { ((StatefulSession) o).dispose(); } pkgs.clear(); processes.clear(); classTypeDeclaration.clear(); if ( this.declarationClassLoader != null ) { this.declarationClassLoader.dispose(); declarationClassLoader = null; } this.getTraitRegistry().dispose(); this.getGlobals().clear(); this.getClassFieldAccessorCache().dispose(); this.getPackagesMap().clear(); this.rootClassLoader.dispose(); this.rootClassLoader = null; } }
ClassDefinition tdef = ruleBase.getTraitRegistry().getTrait( trait.getName() ); ClassDefinition cdef = ruleBase.getTraitRegistry().getTraitable( coreKlass.getName() ); throw new RuntimeDroolsException( "Unable to create definition for class " + trait + " : " + e.getMessage() ); ruleBase.getTraitRegistry().addTrait( tdef ); } else { throw new RuntimeDroolsException( "Unable to find Trait definition for class " + trait.getName() + ". It should have been DECLARED as a trait" ); throw new RuntimeDroolsException( "Unable to create definition for class " + coreKlass.getName() + " : " + e.getMessage() ); ruleBase.getTraitRegistry().addTraitable( cdef ); } else { throw new RuntimeDroolsException( "Unable to find Core class definition for class " + coreKlass.getName() + ". It should have been DECLARED as traitable" ); propWrapperBuilder.init( tdef, ruleBase.getTraitRegistry() ); try { byte[] propWrapper = propWrapperBuilder.buildClass( cdef ); proxyBuilder.init( tdef, rcf.getBaseTraitProxyClass(), ruleBase.getTraitRegistry() ); try { byte[] proxy = proxyBuilder.buildClass( cdef ); BitSet mask = ruleBase.getTraitRegistry().getFieldMask( trait.getName(), cdef.getDefinedClass().getName() ); Class<T> proxyClass = (Class<T>) ruleBase.getRootClassLoader().loadClass( proxyName, true ); Class<T> wrapperClass = (Class<T>) ruleBase.getRootClassLoader().loadClass( wrapperName, true );
getTraitRegistry().merge( newPkg.getTraitRegistry() );