private void createInstantiator() { instantiator = proxyFactory.createProxy(serviceInterface, new PlasticClassTransformer() { @Override public void transform(PlasticClass plasticClass) { PlasticField filterField = plasticClass.introduceField(filterInterface, "filter") .injectFromInstanceContext(); PlasticField nextField = plasticClass.introduceField(serviceInterface, "next") .injectFromInstanceContext(); processMethods(plasticClass, filterField, nextField); plasticClass.addToString(String.format("<PipelineBridge from %s to %s>", serviceInterface.getName(), filterInterface.getName())); } }); }
private void createInstantiator() { instantiator = proxyFactory.createProxy(serviceInterface, new PlasticClassTransformer() { @Override public void transform(PlasticClass plasticClass) { PlasticField filterField = plasticClass.introduceField(filterInterface, "filter") .injectFromInstanceContext(); PlasticField nextField = plasticClass.introduceField(serviceInterface, "next") .injectFromInstanceContext(); processMethods(plasticClass, filterField, nextField); plasticClass.addToString(String.format("<PipelineBridge from %s to %s>", serviceInterface.getName(), filterInterface.getName())); } }); }
private <T> T createNonReloadingProxy(Class<T> interfaceClass, final Class<? extends T> implementationClass, final ObjectLocator locator) { final ObjectCreator<T> autobuildCreator = new ObjectCreator<T>() { @Override public T createObject() { return locator.autobuild(implementationClass); } }; ObjectCreator<T> justInTime = new ObjectCreator<T>() { private T delegate; @Override public synchronized T createObject() { if (delegate == null) delegate = autobuildCreator.createObject(); return delegate; } }; return proxyFactory.createProxy(interfaceClass, justInTime, String.format("<Autobuild proxy %s(%s)>", implementationClass.getName(), interfaceClass.getName())); }
/** * Creates a class and an instance of that class. Updates the cache and returns the instance. */ private <S> S createInstance(final Class<S> serviceInterface) { ClassInstantiator instantiator = proxyFactory.createProxy(serviceInterface, new PlasticClassTransformer() { @Override public void transform(PlasticClass plasticClass) { plasticClass.addToString(String.format("<NoOp %s>", serviceInterface.getName())); } }); return serviceInterface.cast(instantiator.newInstance()); } }
private <T> T createNonReloadingProxy(Class<T> interfaceClass, final Class<? extends T> implementationClass, final ObjectLocator locator) { final ObjectCreator<T> autobuildCreator = new ObjectCreator<T>() { @Override public T createObject() { return locator.autobuild(implementationClass); } }; ObjectCreator<T> justInTime = new ObjectCreator<T>() { private T delegate; @Override public synchronized T createObject() { if (delegate == null) delegate = autobuildCreator.createObject(); return delegate; } }; return proxyFactory.createProxy(interfaceClass, justInTime, String.format("<Autobuild proxy %s(%s)>", implementationClass.getName(), interfaceClass.getName())); }
/** * Creates a class and an instance of that class. Updates the cache and returns the instance. */ private <S> S createInstance(final Class<S> serviceInterface) { ClassInstantiator instantiator = proxyFactory.createProxy(serviceInterface, new PlasticClassTransformer() { @Override public void transform(PlasticClass plasticClass) { plasticClass.addToString(String.format("<NoOp %s>", serviceInterface.getName())); } }); return serviceInterface.cast(instantiator.newInstance()); } }
@Override @SuppressWarnings("unchecked") public <T> T build(final Class<T> commandInterface, List<T> commands) { // Jump through some hoops to convert the list into an array of the proper type Object[] array = (Object[]) Array.newInstance(commandInterface, commands.size()); final Object[] commandsArray = commands.toArray(array); ClassInstantiator<T> instantiator = proxyFactory.createProxy(commandInterface, new PlasticClassTransformer() { @Override public void transform(PlasticClass plasticClass) { PlasticField commandsField = plasticClass.introduceField(commandsArray.getClass(), "commands").inject( commandsArray); for (Method method : commandInterface.getMethods()) { implementMethod(plasticClass, method, commandsField); } plasticClass.addToString(String.format("<Command chain of %s>", commandInterface.getName())); } }); return instantiator.newInstance(); }
public <T> T build(final Class<T> serviceType) { ClassInstantiator<T> instantiator = proxyFactory.createProxy(serviceType, new PlasticClassTransformer() { public void transform(PlasticClass plasticClass) { PlasticMethod delegateMethod = plasticClass.introducePrivateMethod( PlasticUtils.toTypeName(serviceType), "delegate", null, null); delegateMethod.addAdvice(new MethodAdvice() { public void advise(MethodInvocation invocation) { invocation.setReturnValue(environment.peekRequired(serviceType)); } }); for (Method method : serviceType.getMethods()) { plasticClass.introduceMethod(method).delegateTo(delegateMethod); } plasticClass.addToString(String.format("<EnvironmentalProxy for %s>", serviceType.getName())); } }); return instantiator.newInstance(); } }
@Override @SuppressWarnings("unchecked") public <T> T build(final Class<T> commandInterface, List<T> commands) { // Jump through some hoops to convert the list into an array of the proper type Object[] array = (Object[]) Array.newInstance(commandInterface, commands.size()); final Object[] commandsArray = commands.toArray(array); ClassInstantiator<T> instantiator = proxyFactory.createProxy(commandInterface, new PlasticClassTransformer() { @Override public void transform(PlasticClass plasticClass) { PlasticField commandsField = plasticClass.introduceField(commandsArray.getClass(), "commands").inject( commandsArray); for (Method method : commandInterface.getMethods()) { implementMethod(plasticClass, method, commandsField); } plasticClass.addToString(String.format("<Command chain of %s>", commandInterface.getName())); } }); return instantiator.newInstance(); }
private <T> T createReloadingProxy(Class<T> interfaceClass, final Class<? extends T> implementationClass, ObjectLocator locator) { ReloadableObjectCreator creator = new ReloadableObjectCreator(proxyFactory, implementationClass.getClassLoader(), implementationClass.getName(), loggerSource.getLogger(implementationClass), this, locator); getService(UpdateListenerHub.class).addUpdateListener(creator); return proxyFactory.createProxy(interfaceClass, implementationClass, (ObjectCreator<T>) creator, String.format("<Autoreload proxy %s(%s)>", implementationClass.getName(), interfaceClass.getName())); }
@SuppressWarnings("unchecked") public Object createService(ServiceResources resources, ObjectCreator creator) { ObjectCreator perTestCreator = new PerTestServiceCreator(perTestManager, creator); Class<?> serviceInterface = resources.getServiceInterface(); String toString = format("<PerTest Proxy for %s(%s)>", resources.getServiceId(), serviceInterface.getName()); return proxyFactory.createProxy(serviceInterface, perTestCreator, toString); } }
private <T> T createReloadingProxy(Class<T> interfaceClass, final Class<? extends T> implementationClass, ObjectLocator locator) { ReloadableObjectCreator creator = new ReloadableObjectCreator(proxyFactory, implementationClass.getClassLoader(), implementationClass.getName(), loggerSource.getLogger(implementationClass), this, locator); getService(UpdateListenerHub.class).addUpdateListener(creator); return proxyFactory.createProxy(interfaceClass, implementationClass, (ObjectCreator<T>) creator, String.format("<Autoreload proxy %s(%s)>", implementationClass.getName(), interfaceClass.getName())); }
private Object createProxyInstance(final ObjectCreator creator, final ServiceProxyToken token, final Class serviceInterface, final Class serviceImplementation, final String description) ClassInstantiator instantiator = proxyFactory.createProxy(serviceInterface, serviceImplementation, new PlasticClassTransformer()
@Override public Object createService(ServiceResources resources, ObjectCreator creator) { ObjectCreator perThreadCreator = perthreadManager.createValue(creator); Class serviceInterface = resources.getServiceInterface(); return proxyFactory.createProxy(serviceInterface, perThreadCreator, "<PerThread Proxy for " + resources.getServiceId() + "(" + serviceInterface.getName() + ")>"); } }
@Override public Object createService(ServiceResources resources, ObjectCreator creator) { ObjectCreator perThreadCreator = perthreadManager.createValue(creator); Class serviceInterface = resources.getServiceInterface(); return proxyFactory.createProxy(serviceInterface, perThreadCreator, "<PerThread Proxy for " + resources.getServiceId() + "(" + serviceInterface.getName() + ")>"); } }
@SuppressWarnings( { "unchecked", "rawtypes" }) private EntityManager getOrCreateProxy(final AnnotationProvider annotationProvider, final ObjectLocator objectLocator) { final PersistenceContext annotation = annotationProvider .getAnnotation(PersistenceContext.class); final String unitName = annotation == null ? null : annotation.unitName(); EntityManager proxy = emProxyByName.get(unitName); if (proxy == null) synchronized (this) { final PlasticProxyFactory proxyFactory = objectLocator.getService( "PlasticProxyFactory", PlasticProxyFactory.class); proxy = proxyFactory.createProxy(EntityManager.class, new ObjectCreator() { @Override public Object createObject() { final EntityManagerManager entityManagerManager = objectLocator .getService(EntityManagerManager.class); return JpaInternalUtils.getEntityManager(entityManagerManager, annotation); } }, "<EntityManagerProxy>"); emProxyByName.put(unitName, proxy); } return proxy; }
@SuppressWarnings( { "unchecked", "rawtypes" }) private EntityManager getOrCreateProxy(final AnnotationProvider annotationProvider, final ObjectLocator objectLocator) { final PersistenceContext annotation = annotationProvider .getAnnotation(PersistenceContext.class); final String unitName = annotation == null ? null : annotation.unitName(); EntityManager proxy = emProxyByName.get(unitName); if (proxy == null) synchronized (this) { final PlasticProxyFactory proxyFactory = objectLocator.getService( "PlasticProxyFactory", PlasticProxyFactory.class); proxy = proxyFactory.createProxy(EntityManager.class, new ObjectCreator() { @Override public Object createObject() { final EntityManagerManager entityManagerManager = objectLocator .getService(EntityManagerManager.class); return JpaInternalUtils.getEntityManager(entityManagerManager, annotation); } }, "<EntityManagerProxy>"); emProxyByName.put(unitName, proxy); } return proxy; }
private Object createReloadableProxy(ServiceBuilderResources resources) { ReloadableServiceImplementationObjectCreator reloadableCreator = new ReloadableServiceImplementationObjectCreator(proxyFactory, resources, proxyFactory.getClassLoader(), serviceImplementationClass.getName()); resources.getService(UpdateListenerHub.class).addUpdateListener(reloadableCreator); if (eagerLoad) { reloadableCreator.createObject(); } return proxyFactory.createProxy(serviceInterfaceClass, resources.getServiceImplementation(), reloadableCreator, getDescription()); } }
private Object createReloadableProxy(ServiceBuilderResources resources) { ReloadableServiceImplementationObjectCreator reloadableCreator = new ReloadableServiceImplementationObjectCreator(proxyFactory, resources, proxyFactory.getClassLoader(), serviceImplementationClass.getName()); resources.getService(UpdateListenerHub.class).addUpdateListener(reloadableCreator); if (eagerLoad) { reloadableCreator.createObject(); } return proxyFactory.createProxy(serviceInterfaceClass, resources.getServiceImplementation(), reloadableCreator, getDescription()); } }
private void createProxy() { try { upgradeReadLockToWriteLock(); this.messagesSource = objectLocator.getService(ComponentMessagesSource.class); this.threadLocale = objectLocator.getService(ThreadLocale.class); PlasticProxyFactory proxyFactory = objectLocator.getService("PlasticProxyFactory", PlasticProxyFactory.class); proxy = proxyFactory.createProxy(Messages.class, new ApplicationMessagesObjectCreator(), "<ApplicationMessagesProxy>"); // Listen for invalidations; clear our cache of localized Messages bundles when // an invalidation occurs. messagesSource.getInvalidationEventHub().clearOnInvalidation(localeToMessages); } finally { downgradeWriteLockToReadLock(); } }