All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.cucumber.openejb.OpenEJBObjectFactory Maven / Gradle / Ivy

The newest version!
package io.cucumber.openejb;

import io.cucumber.core.backend.CucumberBackendException;
import io.cucumber.core.backend.ObjectFactory;
import org.apache.openejb.OpenEjbContainer;
import org.apiguardian.api.API;

import javax.ejb.embeddable.EJBContainer;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;

@API(status = API.Status.STABLE)
public final class OpenEJBObjectFactory implements ObjectFactory {

    private final List classes = new ArrayList();
    private final Map, Object> instances = new HashMap, Object>();
    private EJBContainer container;

    @Override
    public void start() {
        final StringBuilder callers = new StringBuilder();
        for (Iterator it = classes.iterator(); it.hasNext();) {
            callers.append(it.next());
            if (it.hasNext()) {
                callers.append(",");
            }
        }

        Properties properties = new Properties();
        properties.setProperty(OpenEjbContainer.Provider.OPENEJB_ADDITIONNAL_CALLERS_KEY, callers.toString());
        container = EJBContainer.createEJBContainer(properties);
    }

    @Override
    public void stop() {
        container.close();
        instances.clear();
    }

    @Override
    public boolean addClass(Class clazz) {
        classes.add(clazz.getName());
        return true;
    }

    @Override
    public  T getInstance(Class type) {
        if (instances.containsKey(type)) {
            return type.cast(instances.get(type));
        }

        T object;
        try {
            object = type.newInstance();
            container.getContext().bind("inject", object);
        } catch (Exception e) {
            throw new CucumberBackendException("can't create " + type.getName(), e);
        }
        instances.put(type, object);
        return object;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy