X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=test%2Fenterprise%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Ftest%2Finject%2FJavaEETestInjectorFactory.java;h=f5814981064a369c26929b034732c976c233f13f;hb=83898516d61bfcd1f4e3a3ea79bb56f3877f4900;hp=c2228b987a9de41c6c2f9ac342df1e6eb1bed5ac;hpb=a10b60331e4321919cb0230290923a5e4a865e40;p=utils diff --git a/test/enterprise/src/main/java/org/wamblee/test/inject/JavaEETestInjectorFactory.java b/test/enterprise/src/main/java/org/wamblee/test/inject/JavaEETestInjectorFactory.java index c2228b98..f5814981 100644 --- a/test/enterprise/src/main/java/org/wamblee/test/inject/JavaEETestInjectorFactory.java +++ b/test/enterprise/src/main/java/org/wamblee/test/inject/JavaEETestInjectorFactory.java @@ -15,57 +15,92 @@ */ package org.wamblee.test.inject; +import java.util.ArrayList; +import java.util.List; + import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; import org.wamblee.inject.Injector; -import org.wamblee.inject.InjectorFactory; import org.wamblee.inject.InjectorBuilder; +import org.wamblee.inject.InjectorFactory; import org.wamblee.test.persistence.JpaBuilder; /** *

- * The test injector factory provides dependency injection of a contextual entity manager - * using the support/inject mini framework. It supports dependency injection of fields - * annoted with @PersistenceContext. It only supports one persistence context - * at the moment. This injector can be easily used together with {@link JpaBuilder#getContextualEntityManager()} - * for obtaining an entity manager in unit test. + * The test injector factory provides dependency injection of a contextual + * entity manager using the support/inject mini framework. It supports + * dependency injection of fields annoted with + * @PersistenceContext. It only supports one persistence + * context at the moment. This injector can be easily used together with + * {@link JpaBuilder#getContextualEntityManager()} for obtaining an entity + * manager in unit test. *

* *

- * The reason it is needed is because standard injection mechanisms (such as weld CDI) do not support - * entity manager injection in a Java SE environment out of the box. + * The reason it is needed is because standard injection mechanisms (such as + * weld CDI) do not support entity manager injection in a Java SE environment + * out of the box. *

- * + * *

- * To use it, construct the factory using one of the available constructors and set - * InjectorBuilder.setInjectorFactory(InjectorFactory). + * To use it, construct the factory using one of the available constructors and + * set InjectorBuilder.setInjectorFactory(InjectorFactory). *

* * @author Erik Brakkee - * + * */ public class JavaEETestInjectorFactory implements InjectorFactory { - private EntityManager entityManager; + private List bindings; private InjectorFactory delegate; - + /** - * Constructs the factory. - * @param aEntityManager Contextual entity manager to inject. - * @param aInjectorFactory Injector factory to delegate to. + * Constructs the factory. + * + * @param aInjectorFactory + * Injector factory to delegate to. */ - public JavaEETestInjectorFactory(EntityManager aEntityManager, InjectorFactory aInjectorFactory) { - entityManager = aEntityManager; + public JavaEETestInjectorFactory(InjectorFactory aInjectorFactory) { + bindings = new ArrayList(); delegate = aInjectorFactory; } /** - * Constructs the factory with the default injector factory obtained from - * {@link InjectorBuilder#getInjector()}. - * @param aEntityManager Contextual entity manager to inject. + * Adds default entity manager binding. Any field annotated with @PersistenceContext + * and of type entity manager will get injected. + * + * @param aEntityManager + * Entitymanager object to inject. + * @return Factory to allow chaining. + */ + public JavaEETestInjectorFactory addEntityManagerBinding( + EntityManager aEntityManager) { + Binding em = new Binding(EntityManager.class, PersistenceContext.class, + aEntityManager); + addBinding(em); + return this; + } + + /** + * Adds another custom injection binding. + * + * @param aBinding + * Injection binding to use. + * @return the factoryto allow chaining. + */ + public JavaEETestInjectorFactory addBinding(Binding aBinding) { + bindings.add(aBinding); + return this; + } + + /** + * Constructs the factory with the default injector factory obtained from + * {@link InjectorBuilder#getInjector()}. */ - public JavaEETestInjectorFactory(EntityManager aEntityManager) { - this(aEntityManager, getDefaultInjectorFactory()); + public JavaEETestInjectorFactory() { + this(getDefaultInjectorFactory()); } private static InjectorFactory getDefaultInjectorFactory() { @@ -75,7 +110,6 @@ public class JavaEETestInjectorFactory implements InjectorFactory { @Override public Injector create(Class aClass) { - return new JavaEETestInjector(aClass, entityManager, delegate - .create(aClass)); + return new JavaEETestInjector(aClass, bindings, delegate.create(aClass)); } }