Search in sources :

Example 81 with Assembler

use of org.apache.openejb.assembler.classic.Assembler in project tomee by apache.

the class EjbObjectInputStreamTest method setUp.

@Before
public void setUp() throws Exception {
    oldWhitelist = System.getProperty("tomee.serialization.class.whitelist");
    oldBlacklist = System.getProperty("tomee.serialization.class.blacklist");
    System.setProperty("tomee.serialization.class.whitelist", "org.apache.openejb.,java.lang.SecurityException,java.lang.RuntimeException,java.lang.Exception," + "java.lang.Throwable,java.lang.StackTraceElement,java.util.Collections,java.util.ArrayList,java.util.Properties,java.util.Hashtable,java.util.HashSet," + "java.net.URI,java.util.TreeSet,java.util.LinkedHashSet,java.lang.String");
    System.setProperty("tomee.serialization.class.blacklist", "-");
    config = new ConfigurationFactory();
    assembler = new Assembler();
    assembler.createProxyFactory(config.configureService(ProxyFactoryInfo.class));
    assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
    assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
    assembler.createContainer(config.configureService(StatelessSessionContainerInfo.class));
    final Properties props = new Properties();
    props.setProperty(Context.INITIAL_CONTEXT_FACTORY, LocalInitialContextFactory.class.getName());
    context = new InitialContext(props);
}
Also used : StatelessSessionContainerInfo(org.apache.openejb.assembler.classic.StatelessSessionContainerInfo) ProxyFactoryInfo(org.apache.openejb.assembler.classic.ProxyFactoryInfo) TransactionServiceInfo(org.apache.openejb.assembler.classic.TransactionServiceInfo) ConfigurationFactory(org.apache.openejb.config.ConfigurationFactory) Assembler(org.apache.openejb.assembler.classic.Assembler) Properties(java.util.Properties) LocalInitialContextFactory(org.apache.openejb.core.LocalInitialContextFactory) SecurityServiceInfo(org.apache.openejb.assembler.classic.SecurityServiceInfo) InitialContext(javax.naming.InitialContext) Before(org.junit.Before)

Example 82 with Assembler

use of org.apache.openejb.assembler.classic.Assembler in project tomee by apache.

the class OpenejbLookupTest method testPlainInitialContext.

public void testPlainInitialContext() throws Exception {
    final Assembler assembler = new Assembler();
    final ConfigurationFactory config = new ConfigurationFactory();
    assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
    assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
    final EjbJar ejbJar = new EjbJar();
    ejbJar.addEnterpriseBean(new StatelessBean(FooBean.class));
    assembler.createApplication(config.configureApplication(ejbJar));
    final Context context = new InitialContext();
    assertOpenejbUrlLookups(context);
}
Also used : InitialContext(javax.naming.InitialContext) Context(javax.naming.Context) TransactionServiceInfo(org.apache.openejb.assembler.classic.TransactionServiceInfo) StatelessBean(org.apache.openejb.jee.StatelessBean) ConfigurationFactory(org.apache.openejb.config.ConfigurationFactory) Assembler(org.apache.openejb.assembler.classic.Assembler) SecurityServiceInfo(org.apache.openejb.assembler.classic.SecurityServiceInfo) InitialContext(javax.naming.InitialContext) EjbJar(org.apache.openejb.jee.EjbJar)

Example 83 with Assembler

use of org.apache.openejb.assembler.classic.Assembler in project tomee by apache.

the class TomEEEmbeddedMojo method reload.

protected synchronized void reload(final Thread thread, final ClassLoader loader, final Container container) throws OpenEJBException, NamingException, IOException {
    getLog().info("Redeploying " + (deployedName == null ? '/' : deployedName));
    try {
        final Assembler assembler = SystemInstance.get().getComponent(Assembler.class);
        if (classpathAsWar) {
            // this doesn't track module names so no need to go through container.undeploy()
            assembler.destroyApplication(assembler.getDeployedApplications().iterator().next().path);
        } else {
            container.undeploy(deployedName);
        }
    } catch (final UndeployException e) {
        throw new IllegalStateException(e);
    }
    doDeploy(thread, loader, container, false);
    getLog().info("Redeployed " + (deployedName == null ? '/' : deployedName));
}
Also used : Assembler(org.apache.openejb.assembler.classic.Assembler) UndeployException(org.apache.openejb.UndeployException)

Example 84 with Assembler

use of org.apache.openejb.assembler.classic.Assembler in project tomee by apache.

the class Container method start.

public void start() throws Exception {
    if (base == null || !base.exists()) {
        setup(configuration);
    }
    final Properties props = configuration.getProperties();
    if (props != null) {
        StrSubstitutor substitutor = null;
        for (final String s : props.stringPropertyNames()) {
            final String v = props.getProperty(s);
            if (v != null && v.contains("${")) {
                if (substitutor == null) {
                    final Map<String, String> placeHolders = new HashMap<>();
                    placeHolders.put("tomee.embedded.http", Integer.toString(configuration.getHttpPort()));
                    placeHolders.put("tomee.embedded.https", Integer.toString(configuration.getHttpsPort()));
                    placeHolders.put("tomee.embedded.stop", Integer.toString(configuration.getStopPort()));
                    substitutor = new StrSubstitutor(placeHolders);
                }
                props.put(s, substitutor.replace(v));
            }
        }
        // inherit from system props
        final Properties properties = new Properties(System.getProperties());
        properties.putAll(configuration.getProperties());
        Logger.configure(properties);
    } else {
        Logger.configure();
    }
    final File conf = new File(base, "conf");
    final File webapps = new File(base, "webapps");
    final String catalinaBase = base.getAbsolutePath();
    // set the env before calling anoything on tomcat or Catalina!!
    // TODO: save previous value and restore in stop
    System.setProperty("catalina.base", catalinaBase);
    System.setProperty("openejb.deployments.classpath", "false");
    System.setProperty("catalina.home", catalinaBase);
    System.setProperty("catalina.base", catalinaBase);
    System.setProperty("openejb.home", catalinaBase);
    System.setProperty("openejb.base", catalinaBase);
    System.setProperty("openejb.servicemanager.enabled", "false");
    copyFileTo(conf, "catalina.policy");
    copyTemplateTo(conf, "catalina.properties");
    copyFileTo(conf, "context.xml");
    copyFileTo(conf, "openejb.xml");
    copyFileTo(conf, "tomcat-users.xml");
    copyFileTo(conf, "web.xml");
    final boolean initialized;
    if (configuration.hasServerXml()) {
        final File file = new File(conf, "server.xml");
        if (!file.equals(configuration.getServerXmlFile())) {
            final FileOutputStream fos = new FileOutputStream(file);
            try {
                IO.copy(configuration.getServerXmlFile(), fos);
            } finally {
                IO.close(fos);
            }
        }
        // respect config (host/port) of the Configuration
        final QuickServerXmlParser ports = QuickServerXmlParser.parse(file);
        if (configuration.isKeepServerXmlAsThis()) {
            // force ports to be able to stop the server and get @ArquillianResource
            configuration.setHttpPort(Integer.parseInt(ports.http()));
            configuration.setStopPort(Integer.parseInt(ports.stop()));
        } else {
            final Map<String, String> replacements = new HashMap<String, String>();
            replacements.put(ports.http(), String.valueOf(configuration.getHttpPort()));
            replacements.put(ports.https(), String.valueOf(configuration.getHttpsPort()));
            replacements.put(ports.stop(), String.valueOf(configuration.getStopPort()));
            IO.copy(IO.slurp(new ReplaceStringsInputStream(IO.read(file), replacements)).getBytes(), file);
        }
        tomcat.server(createServer(file.getAbsolutePath()));
        initialized = true;
    } else {
        copyFileTo(conf, "server.xml");
        initialized = false;
    }
    if (props != null && !props.isEmpty()) {
        final File file = new File(conf, "system.properties");
        if (file.isFile()) {
            final Properties existing = IO.readProperties(file);
            for (final String key : existing.stringPropertyNames()) {
                if (!props.containsKey(key)) {
                    props.put(key, existing.getProperty(key));
                }
            }
        }
        final FileWriter systemProperties = new FileWriter(file);
        try {
            props.store(systemProperties, "");
        } finally {
            IO.close(systemProperties);
        }
    }
    // Need to use JULI so log messages from the tests are visible
    // using openejb logging conf in embedded mode
    /* if we use our config (Logger.configure()) don't override it
        copyFileTo(conf, "logging.properties");
        System.setProperty("java.util.logging.manager", "org.apache.juli.ClassLoaderLogManager");
        final File logging = new File(conf, "logging.properties");
        if (logging.exists()) {
            System.setProperty("java.util.logging.config.file", logging.getAbsolutePath());
        }
        */
    // Trigger loading of catalina.properties
    CatalinaProperties.getProperty("foo");
    tomcat.setBaseDir(base.getAbsolutePath());
    tomcat.setHostname(configuration.getHost());
    if (!initialized) {
        tomcat.getHost().setAppBase(webapps.getAbsolutePath());
        tomcat.getEngine().setDefaultHost(configuration.getHost());
        tomcat.setHostname(configuration.getHost());
    }
    if (configuration.getRealm() != null) {
        tomcat.getEngine().setRealm(configuration.getRealm());
    }
    if (tomcat.getRawConnector() == null && !configuration.isSkipHttp()) {
        final Connector connector = createConnector();
        connector.setPort(configuration.getHttpPort());
        if (connector.getAttribute("connectionTimeout") == null) {
            connector.setAttribute("connectionTimeout", "3000");
        }
        if (configuration.isHttp2()) {
            // would likely need SSLHostConfig programmatically
            connector.addUpgradeProtocol(new Http2Protocol());
        }
        tomcat.getService().addConnector(connector);
        tomcat.setConnector(connector);
    }
    // create https connector
    if (configuration.isSsl()) {
        final Connector httpsConnector = createConnector();
        httpsConnector.setPort(configuration.getHttpsPort());
        httpsConnector.setSecure(true);
        httpsConnector.setProperty("SSLEnabled", "true");
        httpsConnector.setProperty("sslProtocol", configuration.getSslProtocol());
        if (configuration.getKeystoreFile() != null) {
            httpsConnector.setAttribute("", configuration.getKeystoreFile());
        }
        if (configuration.getKeystorePass() != null) {
            httpsConnector.setAttribute("keystorePass", configuration.getKeystorePass());
        }
        httpsConnector.setAttribute("keystoreType", configuration.getKeystoreType());
        if (configuration.getClientAuth() != null) {
            httpsConnector.setAttribute("clientAuth", configuration.getClientAuth());
        }
        if (configuration.getKeyAlias() != null) {
            httpsConnector.setAttribute("keyAlias", configuration.getKeyAlias());
        }
        if (configuration.isHttp2()) {
            // would likely need SSLHostConfig programmatically
            httpsConnector.addUpgradeProtocol(new Http2Protocol());
        }
        tomcat.getService().addConnector(httpsConnector);
        if (configuration.isSkipHttp()) {
            tomcat.setConnector(httpsConnector);
        }
    }
    for (final Connector c : configuration.getConnectors()) {
        tomcat.getService().addConnector(c);
    }
    if (!configuration.isSkipHttp() && !configuration.isSsl() && !configuration.getConnectors().isEmpty()) {
        tomcat.setConnector(configuration.getConnectors().iterator().next());
    }
    // Bootstrap Tomcat
    // create it after Logger is configured
    Logger.getInstance(LogCategory.OPENEJB_STARTUP, Container.class).info("Starting TomEE from: " + base.getAbsolutePath());
    if (configuration.getUsers() != null) {
        for (final Map.Entry<String, String> user : configuration.getUsers().entrySet()) {
            tomcat.addUser(user.getKey(), user.getValue());
        }
    }
    if (configuration.getRoles() != null) {
        for (final Map.Entry<String, String> user : configuration.getRoles().entrySet()) {
            for (final String role : user.getValue().split(" *, *")) {
                tomcat.addRole(user.getKey(), role);
            }
        }
    }
    if (!initialized) {
        tomcat.init();
    }
    tomcat.start();
    // Bootstrap OpenEJB
    final Properties properties = new Properties();
    properties.setProperty("openejb.deployments.classpath", "false");
    properties.setProperty("openejb.loader", "tomcat-system");
    properties.setProperty("openejb.home", catalinaBase);
    properties.setProperty("openejb.base", catalinaBase);
    properties.setProperty("openejb.servicemanager.enabled", "false");
    if (configuration.getProperties() != null) {
        properties.putAll(configuration.getProperties());
    }
    if (properties.getProperty("openejb.system.apps") == null) {
        // will make startup faster and it is rarely useful for embedded case
        properties.setProperty("openejb.system.apps", "false");
    }
    if (configuration.isQuickSession()) {
        properties.put("openejb.session.manager", QuickSessionManager.class.getName());
    }
    try {
        final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        final Properties tomcatServerInfo = IO.readProperties(classLoader.getResourceAsStream("org/apache/catalina/util/ServerInfo.properties"), new Properties());
        String serverNumber = tomcatServerInfo.getProperty("server.number");
        if (serverNumber == null) {
            // Tomcat5 only has server.info
            final String serverInfo = tomcatServerInfo.getProperty("server.info");
            if (serverInfo != null) {
                final int slash = serverInfo.indexOf('/');
                serverNumber = serverInfo.substring(slash + 1);
            }
        }
        if (serverNumber != null) {
            System.setProperty("tomcat.version", serverNumber);
        }
        final String serverBuilt = tomcatServerInfo.getProperty("server.built");
        if (serverBuilt != null) {
            System.setProperty("tomcat.built", serverBuilt);
        }
    } catch (final Throwable e) {
    // no-op
    }
    final TomcatLoader loader = new TomcatLoader();
    loader.initDefaults(properties);
    // need to add properties after having initialized defaults
    // to properties passed to SystemInstance otherwise we loose some of them
    final Properties initProps = new Properties();
    initProps.putAll(System.getProperties());
    initProps.putAll(properties);
    if (SystemInstance.isInitialized()) {
        SystemInstance.get().getProperties().putAll(initProps);
    } else {
        SystemInstance.init(initProps);
    }
    SystemInstance.get().setComponent(StandardServer.class, (StandardServer) tomcat.getServer());
    // needed again cause of init()
    SystemInstance.get().setComponent(Server.class, tomcat.getServer());
    loader.initialize(properties);
    assembler = SystemInstance.get().getComponent(Assembler.class);
    configurationFactory = new ConfigurationFactory();
    if (configuration.isWithEjbRemote()) {
        tomcat.getHost().addChild(new TomEERemoteWebapp());
    }
}
Also used : Connector(org.apache.catalina.connector.Connector) HashMap(java.util.HashMap) TomEERemoteWebapp(org.apache.tomee.catalina.remote.TomEERemoteWebapp) FileWriter(java.io.FileWriter) CatalinaProperties(org.apache.catalina.startup.CatalinaProperties) Properties(java.util.Properties) StrSubstitutor(org.apache.commons.lang3.text.StrSubstitutor) QuickServerXmlParser(org.apache.tomee.util.QuickServerXmlParser) ReplaceStringsInputStream(org.codehaus.swizzle.stream.ReplaceStringsInputStream) QuickSessionManager(org.apache.tomee.catalina.session.QuickSessionManager) FileOutputStream(java.io.FileOutputStream) ConfigurationFactory(org.apache.openejb.config.ConfigurationFactory) TomcatLoader(org.apache.tomee.catalina.TomcatLoader) Assembler(org.apache.openejb.assembler.classic.Assembler) File(java.io.File) Map(java.util.Map) HashMap(java.util.HashMap) Http2Protocol(org.apache.coyote.http2.Http2Protocol)

Example 85 with Assembler

use of org.apache.openejb.assembler.classic.Assembler in project tomee by apache.

the class OpenEJBDeployableContainer method start.

@Override
public void start() throws LifecycleException {
    try {
        initialContext = new InitialContext(properties);
    } catch (final NamingException e) {
        throw new LifecycleException("can't start the OpenEJB container", e);
    }
    assembler = SystemInstance.get().getComponent(Assembler.class);
    configurationFactory = (ConfigurationFactory) SystemInstance.get().getComponent(OpenEjbConfigurationFactory.class);
    if ("true".equalsIgnoreCase(PROPERTIES.getProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE)) && SystemInstance.get().getComponent(WebAppBuilder.class) == null) {
        SystemInstance.get().setComponent(WebAppBuilder.class, new LightweightWebAppBuilder());
    }
    contextProducer.set(initialContext);
    containerArchives = ArquillianUtil.toDeploy(properties);
    final Closeables globalScopeCloseables = new Closeables();
    SystemInstance.get().setComponent(Closeables.class, globalScopeCloseables);
    for (final Archive<?> archive : containerArchives) {
        try {
            quickDeploy(archive, testClass.get(), globalScopeCloseables);
        } catch (final DeploymentException e) {
            Logger.getLogger(OpenEJBDeployableContainer.class.getName()).log(Level.SEVERE, e.getMessage(), e);
        }
    }
}
Also used : LifecycleException(org.jboss.arquillian.container.spi.client.container.LifecycleException) LightweightWebAppBuilder(org.apache.openejb.web.LightweightWebAppBuilder) NamingException(javax.naming.NamingException) DeploymentException(org.jboss.arquillian.container.spi.client.container.DeploymentException) Assembler(org.apache.openejb.assembler.classic.Assembler) InitialContext(javax.naming.InitialContext) LocalInitialContext(org.apache.openejb.core.LocalInitialContext)

Aggregations

Assembler (org.apache.openejb.assembler.classic.Assembler)171 EjbJar (org.apache.openejb.jee.EjbJar)88 ConfigurationFactory (org.apache.openejb.config.ConfigurationFactory)84 SecurityServiceInfo (org.apache.openejb.assembler.classic.SecurityServiceInfo)76 TransactionServiceInfo (org.apache.openejb.assembler.classic.TransactionServiceInfo)76 StatelessBean (org.apache.openejb.jee.StatelessBean)56 InitialContext (javax.naming.InitialContext)50 File (java.io.File)49 AppInfo (org.apache.openejb.assembler.classic.AppInfo)47 Properties (java.util.Properties)42 HashMap (java.util.HashMap)39 ProxyFactoryInfo (org.apache.openejb.assembler.classic.ProxyFactoryInfo)39 ContainerSystem (org.apache.openejb.spi.ContainerSystem)35 EjbJarInfo (org.apache.openejb.assembler.classic.EjbJarInfo)29 LocalInitialContextFactory (org.apache.openejb.core.LocalInitialContextFactory)29 InitContextFactory (org.apache.openejb.core.ivm.naming.InitContextFactory)29 Test (org.junit.Test)29 EjbModule (org.apache.openejb.config.EjbModule)27 StatelessSessionContainerInfo (org.apache.openejb.assembler.classic.StatelessSessionContainerInfo)22 Map (java.util.Map)21