public T get()

in jpa-cdi/src/main/java/org/apache/aries/jpa/cdi/TransactionalContext.java [142:175]


    public <T> T get(
            Contextual<T> contextual,
            CreationalContext<T> creationalContext) {
        if (!isActive()) {
            throw new ContextNotActiveException();
        }

        if (contextual == null) {
            throw new IllegalArgumentException(
                    "No contextual specified to retrieve");
        }

        TransactionSupport transactionSupport = getTransactionSupport();
        Map<Contextual<T>, ContextualInstance<T>> instances =
                getInstances(transactionSupport);
        ContextualInstance<T> contextualInstance = instances.get(contextual);
        if (contextualInstance != null) {
            return contextualInstance.instance;
        } else if (creationalContext == null) {
            return null;
        } else {
            T instance = contextual.create(creationalContext);
            contextualInstance = new ContextualInstance<T>(instance,
                    creationalContext);
            instances.put(contextual, contextualInstance);

            if (log.isDebugEnabled()) {
                log.debug("Created a new transaction scoped instance "
                        + contextualInstance);
            }

            return instance;
        }
    }