@Override public final Object instantiate() throws RulesInstantiationException, ClassNotFoundException { try { Object originalInstance = getOriginalInstantiationStrategy().instantiate(); InvocationHandler invocationHandler = makeInvocationHandler(originalInstance); return Proxy.newProxyInstance(getClassLoader(), getProxyInterfaces(originalInstance), invocationHandler); } catch (Exception e) { throw new RulesInstantiationException(e.getMessage(), e); } }
@Override public final Class<?> getInstanceClass() throws ClassNotFoundException, RulesInstantiationException { return getServiceClass(); }
@Override public void forcedReset() { reset(); getOriginalInstantiationStrategy().forcedReset(); }
@Override public void setServiceClass(Class<?> serviceClass) { try { if (validateServiceClass(serviceClass)) { this.serviceClass = serviceClass; try { Class<?> clazz = undecorateServiceClass(serviceClass, getClassLoader()); getOriginalInstantiationStrategy().setServiceClass(clazz); } catch (Exception e) { throw new OpenlNotCheckedException( "Failed to set service class to instantiation strategy enhancer. Failed to get undecorated class.", e); } } else { throw new OpenlNotCheckedException( "Failed to set service class to instantiation strategy enhancer. Service class isn't supported by this strategy!"); } } catch (ValidationServiceClassException e) { throw new OpenlNotCheckedException( "Failed to set service class to instantiation strategy enhancer. Service class isn't supported by this strategy!", e); } }
/** * Gets enhanced service class. * * @return service class * @throws ClassNotFoundException * @throws InstantiationException */ @Override public final Class<?> getServiceClass() throws ClassNotFoundException { if (serviceClass == null) { try { Class<?> originalServiceClass = getOriginalInstantiationStrategy().getInstanceClass(); serviceClass = decorateServiceClass(originalServiceClass, getClassLoader()); } catch (Exception e) { throw new OpenlNotCheckedException("Failed to enhance service class.", e); } } return serviceClass; }
@Override public void reset() { getOriginalInstantiationStrategy().reset(); serviceClass = null; }
/** * Gets interface classes what used for proxy construction. * * @return proxy interfaces * @throws Exception */ protected Class<?>[] getProxyInterfaces(Object originalInstance) throws Exception { List<Class<?>> proxyInterfaces = new ArrayList<Class<?>>(); proxyInterfaces.add(getServiceClass()); Class<?> originalServiceClass = getOriginalInstantiationStrategy().getInstanceClass(); for (Class<?> interfaceClass : originalInstance.getClass().getInterfaces()) { if (!interfaceClass.equals(originalServiceClass)) { proxyInterfaces.add(interfaceClass); } } return proxyInterfaces.toArray(new Class<?>[] {}); }
@Override public void setServiceClass(Class<?> serviceClass) { try { if (validateServiceClass(serviceClass)) { this.serviceClass = serviceClass; try { Class<?> clazz = undecorateServiceClass(serviceClass, getClassLoader()); getOriginalInstantiationStrategy().setServiceClass(clazz); } catch (Exception e) { throw new OpenlNotCheckedException( "Failed to set service class to instantiation strategy enhancer. Failed to get undecorated class.", e); } } else { throw new OpenlNotCheckedException( "Failed to set service class to instantiation strategy enhancer. Service class isn't supported by this strategy!"); } } catch (ValidationServiceClassException e) { throw new OpenlNotCheckedException( "Failed to set service class to instantiation strategy enhancer. Service class isn't supported by this strategy!", e); } }
/** * Gets enhanced service class. * * @return service class * @throws ClassNotFoundException * @throws InstantiationException */ @Override public final Class<?> getServiceClass() throws ClassNotFoundException { if (serviceClass == null) { try { Class<?> originalServiceClass = getOriginalInstantiationStrategy().getInstanceClass(); serviceClass = decorateServiceClass(originalServiceClass, getClassLoader()); } catch (Exception e) { throw new OpenlNotCheckedException("Failed to enhance service class.", e); } } return serviceClass; }
@Override public void reset() { getOriginalInstantiationStrategy().reset(); serviceClass = null; }
/** * Gets interface classes what used for proxy construction. * * @return proxy interfaces * @throws Exception */ protected Class<?>[] getProxyInterfaces(Object originalInstance) throws Exception { List<Class<?>> proxyInterfaces = new ArrayList<Class<?>>(); proxyInterfaces.add(getServiceClass()); Class<?> originalServiceClass = getOriginalInstantiationStrategy().getInstanceClass(); for (Class<?> interfaceClass : originalInstance.getClass().getInterfaces()) { if (!interfaceClass.equals(originalServiceClass)) { proxyInterfaces.add(interfaceClass); } } return proxyInterfaces.toArray(new Class<?>[] {}); }
@Override public final Object instantiate() throws RulesInstantiationException, ClassNotFoundException { try { Object originalInstance = getOriginalInstantiationStrategy().instantiate(); InvocationHandler invocationHandler = makeInvocationHandler(originalInstance); return Proxy.newProxyInstance(getClassLoader(), getProxyInterfaces(originalInstance), invocationHandler); } catch (Exception e) { throw new RulesInstantiationException(e.getMessage(), e); } }
@Override public Collection<Module> getModules() { return getOriginalInstantiationStrategy().getModules(); }
@Override public void forcedReset() { reset(); getOriginalInstantiationStrategy().forcedReset(); }
@Override public final Class<?> getInstanceClass() throws ClassNotFoundException, RulesInstantiationException { return getServiceClass(); }
@Override public Map<String, Object> getExternalParameters() { return getOriginalInstantiationStrategy().getExternalParameters(); }
@Override public void setExternalParameters(Map<String, Object> parameters) { getOriginalInstantiationStrategy().setExternalParameters(parameters); } }
@Override public void setExternalParameters(Map<String, Object> parameters) { getOriginalInstantiationStrategy().setExternalParameters(parameters); } }
@Override public CompiledOpenClass compile() throws RulesInstantiationException { return getOriginalInstantiationStrategy().compile(); }
@Override public Class<?> getGeneratedRulesClass() throws RulesInstantiationException { return getOriginalInstantiationStrategy().getGeneratedRulesClass(); }