Preloader image

O TomEE permite que você defina seus próprios recursos na sua aplicação e declare-os em META-INF/resources.xml. Isso permite que você injete esses recursos em qualquer componente gerenciado na sua aplicação.

Além disso, você também pode definir um método create no próprio recurso ou em um POJO que atua como uma fábrica. Este exemplo demonstra o uso do método create para registrar adicionalmente o recurso como um JMX MBean, além de disponibilizá-lo para injeção.

Resource

Recursos customizados podem ser definidos usando classes Java muito simples. Nesse caso específico, como o aplicativo também deseja registrar esse como MBean, a classe de recurso precisa seguir a especificação de MBean.

public class Hello implements HelloMBean {

    private AtomicInteger count = new AtomicInteger(0);

    @Override
    public String greet(String name) {
        if (name == null) {
            throw new NullPointerException("Name cannot be null");
        }

        return "Hello, " + name;
    }

    @Override
    public int getCount() {
        return count.get();
    }

    @Override
    public void setCount(int value) {
        count.set(value);
    }

    @Override
    public void increment() {
        count.incrementAndGet();
    }
}

public interface HelloMBean {

    public String greet(final String name);

    public int getCount();

    public void setCount(int count);

    public void increment();

}

Método Criar(Create)

Para evitar adicionar a lógica para registrar o recurso como um MBean em todos os recursos, a aplicação fornece a uma única classe um método create() que cuida dessa lógica para nós.

public class JMXBeanCreator {

    private static Logger LOGGER = Logger.getLogger(JMXBeanCreator.class.getName());
    private Properties properties;

    public Object create() throws MBeanRegistrationException {
        // instantiate the bean

        final String code = properties.getProperty("code");
        final String name = properties.getProperty("name");

        requireNotNull(code);
        requireNotNull(name);

        try {
            final Class<?> cls = Class.forName(code, true, Thread.currentThread().getContextClassLoader());
            final Object instance = cls.newInstance();

            final Field[] fields = cls.getDeclaredFields();
            for (final Field field : fields) {

                final String property = properties.getProperty(field.getName());
                if (property == null) {
                    continue;
                }

                try {
                    field.setAccessible(true);
                    field.set(instance, Converter.convert(property, field.getType(), field.getName()));
                } catch (Exception e) {
                    LOGGER.info(String.format("Unable to set value %s on field %s", property, field.getName()));
                }
            }

            final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
            final ObjectName objectName = new ObjectName(name);
            mbs.registerMBean(instance, objectName);

            return instance;

        } catch (final ClassNotFoundException e) {
            LOGGER.severe("Unable to find class " + code);
            throw new MBeanRegistrationException(e);
        } catch (final InstantiationException e) {
            LOGGER.severe("Unable to create instance of class " + code);
            throw new MBeanRegistrationException(e);
        } catch (final IllegalAccessException e) {
            LOGGER.severe("Illegal access: " + code);
            throw new MBeanRegistrationException(e);
        } catch (final MalformedObjectNameException e) {
            LOGGER.severe("Malformed MBean name: " + name);
            throw new MBeanRegistrationException(e);
        } catch (final InstanceAlreadyExistsException e) {
            LOGGER.severe("Instance already exists: " + name);
            throw new MBeanRegistrationException(e);
        } catch (final NotCompliantMBeanException e) {
            LOGGER.severe("Class is not a valid MBean: " + code);
            throw new MBeanRegistrationException(e);
        } catch (final javax.management.MBeanRegistrationException e) {
            LOGGER.severe("Error registering " + name + ", " + code);
            throw new MBeanRegistrationException(e);
        }
    }

    private void requireNotNull(final String object) throws MBeanRegistrationException {
        if (object == null) {
            throw new MBeanRegistrationException("code property not specified, stopping");
        }
    }

    public Properties getProperties() {
        return properties;
    }

    public void setProperties(final Properties properties) {
        this.properties = properties;
    }
}
que esta classe usa as propriedades definidas na configuração (abaixo), combinada com reflexão, para instanciar o recurso e definir seus atributos. O código acima requer duas propriedades code e name para saber qual classe criar e o nome JMX sob o qual será registrada.

Resource

O recurso pode ser definido em META-INF/resources.xml da seguinte maneira:

<Resources>
  <Resource id="Hello" class-name="org.superbiz.resource.jmx.factory.JMXBeanCreator" factory-name="create">
    code org.superbiz.resource.jmx.resources.Hello
    name superbiz.test:name=Hello
    count 12345
  </Resource>
</Resources>
que o atributo class-name se refere à classe factory, e não o recurso. Depois que o recurso for criado e vinculado ao recurso. Depois que o recurso for criado e vinculado à árvore JNDI do TomEE, a fábrica não é mais usada.

Usando o @Resource para injeção

O caso de teste para este exemplo demonstra a injeção em um EJB como uma maneira de acessar o recurso e também acessar o recurso via JMX.

@RunWith(Arquillian.class)
public class JMXTest {

    @EJB
    private TestEjb ejb;

    @Deployment
    public static EnterpriseArchive createDeployment() {

        final JavaArchive ejbJar = new Mvn.Builder()
                .name("jmx-ejb.jar")
                .build(JavaArchive.class)
                .addClass(JMXTest.class)
                .addClass(TestEjb.class);

        final EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "jmx.ear")
                .addAsModule(ejbJar);

        return ear;
    }

    @Test
    public void test() throws Exception {
        final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
        final ObjectName objectName = new ObjectName("superbiz.test:name=Hello");

        Assert.assertNotNull(ejb);

        Assert.assertEquals(0, mbs.getAttribute(objectName, "Count"));
        Assert.assertEquals(0, ejb.getCount());

        mbs.invoke(objectName, "increment", new Object[0], new String[0]);
        Assert.assertEquals(1, mbs.getAttribute(objectName, "Count"));
        Assert.assertEquals(1, ejb.getCount());

        ejb.increment();
        Assert.assertEquals(2, mbs.getAttribute(objectName, "Count"));
        Assert.assertEquals(2, ejb.getCount());

        Attribute attribute = new Attribute("Count", 12345);
        mbs.setAttribute(objectName, attribute);
        Assert.assertEquals(12345, mbs.getAttribute(objectName, "Count"));
        Assert.assertEquals(12345, ejb.getCount());

        ejb.setCount(23456);
        Assert.assertEquals(23456, mbs.getAttribute(objectName, "Count"));
        Assert.assertEquals(23456, ejb.getCount());

        Assert.assertEquals("Hello, world", mbs.invoke(objectName, "greet", new Object[] { "world" }, new String[] { String.class.getName() }));
        Assert.assertEquals("Hello, world", ejb.greet("world"));
    }

    @Singleton
    @Lock(LockType.READ)
    public static class TestEjb {

        @Resource(name="jmx/Hello")
        private HelloMBean helloMBean;

        public String greet(String name) {
            return helloMBean.greet(name);
        }

        public void setCount(int count) {
            helloMBean.setCount(count);
        }

        public void increment() {
            helloMBean.increment();
        }

        public int getCount() {
            return helloMBean.getCount();
        }
    }
}

O atributo name <name>/<resource-id>`é usado na anotação `@Resource para executar a injeção. Nenhuma configuração adicional é necessária para injetar o recurso.

Propriedades adicionais

Além das propriedades code e name que o código acima usa para instanciar o recurso, o próprio TomEE fornece algumas propriedades para fornecer mais controle sobre a criação de recursos.

Os recursos são normalmente descobertos, criados e vinculados ao JNDI muito cedo no processo de implementação, pois outros componentes dependem deles. Isso pode levar a problemas nos quais o classpath final da aplicação ainda não foi determinado e, portanto, o TomEE não pode carregar seu recurso personalizado.

As seguintes propriedades podem ser usadas para alterar esse comportamento.

  • Lazy

é um valor booleano que, quando verdadeiro, cria um proxy que adia a instanciação real do recurso até a primeira vez que ele é procurado pelo JNDI. Isso pode ser útil se o recurso exigir o classpath da aplicação ou para melhorar o tempo de inicialização não totalmente inicializando recursos que podem não ser usados.

  • UseAppClassLoader

Esse valor booleano força um recurso instanciado Lazy a usar o classloaders da aplicação, em vez do classloader disponível quando os recursos foram processados primeiro.

  • InitializeAfterDeployment

Essa configuração booleana força um recurso criado com a propriedade Lazy a ser instanciado depois que a aplicação é iniciada, em vez de esperar que ele seja procurado. Use esse sinalizador se precisar que o recurso seja carregado,independentemente de ser injetado em um componente gerenciado ou consultado manualmente.

Por padrão, todas essas configurações são false, a menos que o TomEE encontre um recurso da aplicação personalizado que não possa ser instanciado até que a aplicação seja iniciada. Nesse caso, ele definirá esses três sinalizadores para true, a menos que o sinalizador Lazy tenha sido definido explicitamente.

PostConstruct / PreDestroy

Como alternativa ao uso de um método de fábrica, você pode usar @PostConstruct e @PreDestroy dentro da sua classe de recurso (observe que você não pode usar isso dentro de uma classe de fábrica) para gerenciar qualquer criação ou atividades de limpeza. O TomEE chama automaticamente esses métodos quando o aplicativo é iniciado e destruído. O uso do @PostConstruct efetivamente força um recurso carregado lentamente a ser instanciado quando o aplicativo está sendo iniciado - da mesma maneira que a propriedade InitializeAfterDeployment faz.

public class Alternative implements AlternativeMBean {

    private static Logger LOGGER = Logger.getLogger(Alternative.class.getName());
    private Properties properties;

    @PostConstruct
    public void postConstruct() throws MBeanRegistrationException {
        // initialize the bean

        final String code = properties.getProperty("code");
        final String name = properties.getProperty("name");

        requireNotNull(code);
        requireNotNull(name);

        try {
            final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
            final ObjectName objectName = new ObjectName(name);
            mbs.registerMBean(this, objectName);
        } catch (final MalformedObjectNameException e) {
            LOGGER.severe("Malformed MBean name: " + name);
            throw new MBeanRegistrationException(e);
        } catch (final InstanceAlreadyExistsException e) {
            LOGGER.severe("Instance already exists: " + name);
            throw new MBeanRegistrationException(e);
        } catch (final NotCompliantMBeanException e) {
            LOGGER.severe("Class is not a valid MBean: " + code);
            throw new MBeanRegistrationException(e);
        } catch (final javax.management.MBeanRegistrationException e) {
            LOGGER.severe("Error registering " + name + ", " + code);
            throw new MBeanRegistrationException(e);
        }
    }

    @PreDestroy
    public void preDestroy() throws MBeanRegistrationException {
        final String name = properties.getProperty("name");
        requireNotNull(name);

        try {
            final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
            final ObjectName objectName = new ObjectName(name);
            mbs.unregisterMBean(objectName);
        } catch (final MalformedObjectNameException e) {
            LOGGER.severe("Malformed MBean name: " + name);
            throw new MBeanRegistrationException(e);
        } catch (final javax.management.MBeanRegistrationException e) {
            LOGGER.severe("Error unregistering " + name);
            throw new MBeanRegistrationException(e);
        } catch (InstanceNotFoundException e) {
            LOGGER.severe("Error unregistering " + name);
            throw new MBeanRegistrationException(e);
        }
    }

    private void requireNotNull(final String object) throws MBeanRegistrationException {
        if (object == null) {
            throw new MBeanRegistrationException("code property not specified, stopping");
        }
    }

    public Properties getProperties() {
        return properties;
    }

    public void setProperties(final Properties properties) {
        this.properties = properties;
    }

    private int count = 0;

    @Override
    public String greet(String name) {
        if (name == null) {
            throw new NullPointerException("Name cannot be null");
        }

        return "Hello, " + name;
    }

    @Override
    public int getCount() {
        return count;
    }

    @Override
    public void setCount(int value) {
        count = value;
    }

    @Override
    public void increment() {
        count++;
    }
}

Executando

A execução do exemplo pode ser feita no maven com um simples comando mvn clean install, executado no diretório resources-jmx-example.

Ao executar, você verá uma saída semelhante à seguinte.

-------------------------------------------------------
 T E S T E S
-------------------------------------------------------
Running org.superbiz.resource.jmx.JMXTest
Apr 15, 2015 12:40:09 PM org.jboss.arquillian.container.impl.MapObject populate
WARNING: Configuration contain properties not supported by the backing object org.apache.tomee.arquillian.remote.RemoteTomEEConfiguration
Unused property entries: {openejbVersion=${tomee.version}, tomcatVersion=}
Supported property names: [additionalLibs, httpPort, httpsPort, stopCommand, portRange, conf, debug, exportConfAsSystemProperty, type, unpackWars, version, serverXml, preloadClasses, dir, deployerProperties, stopPort, singleDumpByArchiveName, appWorkingDir, host, cleanOnStartUp, quickSession, ajpPort, artifactId, properties, singleDeploymentByArchiveName, groupId, stopHost, lib, catalina_opts, debugPort, webContextToUseWithEars, simpleLog, removeUnusedWebapps, keepServerXmlAsThis, classifier, bin]
Apr 15, 2015 12:40:09 PM org.apache.openejb.arquillian.common.Setup findHome
INFO: Unable to find home in: /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote
Apr 15, 2015 12:40:09 PM org.apache.openejb.arquillian.common.MavenCache getArtifact
INFO: Downloading org.apache.openejb:apache-tomee:7.0.0-SNAPSHOT:zip:plus please wait...
Apr 15, 2015 12:40:10 PM org.apache.openejb.arquillian.common.Zips unzip
INFO: Extracting '/Users/jgallimore/.m2/repository/org/apache/openejb/apache-tomee/7.0.0-SNAPSHOT/apache-tomee-7.0.0-SNAPSHOT-plus.zip' to '/Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote'
Apr 15, 2015 12:40:12 PM org.apache.tomee.arquillian.remote.RemoteTomEEContainer configure
INFO: Downloaded container to: /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT
Started server process on port: 61309
objc[20102]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/jre/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version:        Apache Tomcat (TomEE)/7.0.61 (7.0.0-SNAPSHOT)
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built:          Mar 27 2015 12:03:56 UTC
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number:         7.0.61.0
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name:               Mac OS X
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version:            10.9.5
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture:          x86_64
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home:             /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/jre
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version:           1.7.0_71-b14
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor:            Oracle Corporation
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_BASE:         /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_HOME:         /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -XX:+HeapDumpOnOutOfMemoryError
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -XX:PermSize=64m
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -XX:MaxPermSize=256m
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Xmx512m
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Xms256m
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -XX:ReservedCodeCacheSize=64m
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dtomee.httpPort=61309
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=false
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dorg.apache.openejb.servlet.filters=org.apache.openejb.arquillian.common.ArquillianFilterRunner=/ArquillianServletRunner
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.util.logging.config.file=/Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT/conf/logging.properties
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -javaagent:/Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT/lib/openejb-javaagent.jar
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.io.tmpdir=/Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT/temp
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.endorsed.dirs=/Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT/endorsed
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.base=/Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=/Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.ext.dirs=/Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT/lib
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dorg.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=true
Apr 15, 2015 12:40:14 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -ea
Apr 15, 2015 12:40:14 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /Users/jgallimore/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
Apr 15, 2015 12:40:14 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-61309"]
Apr 15, 2015 12:40:14 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Apr 15, 2015 12:40:16 PM org.apache.openejb.util.OptionsLog info
INFO: Using 'openejb.jdbc.datasource-creator=org.apache.tomee.jdbc.TomEEDataSourceCreator'
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance <init>
INFO: ********************************************************************************
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance <init>
INFO: OpenEJB http://tomee.apache.org/
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance <init>
INFO: Startup: Wed Apr 15 12:40:16 BST 2015
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance <init>
INFO: Copyright 1999-2013 (C) Apache OpenEJB Project, All Rights Reserved.
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance <init>
INFO: Version: 7.0.0-SNAPSHOT
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance <init>
INFO: Build date: 20150415
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance <init>
INFO: Build time: 11:37
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance <init>
INFO: ********************************************************************************
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance <init>
INFO: openejb.home = /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance <init>
INFO: openejb.base = /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT
Apr 15, 2015 12:40:16 PM org.apache.openejb.cdi.CdiBuilder initializeOWB
INFO: Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@4a00b74b
Apr 15, 2015 12:40:16 PM org.apache.openejb.cdi.CdiBuilder initializeOWB
INFO: Succeeded in installing singleton service
Apr 15, 2015 12:40:17 PM org.apache.openejb.config.ConfigurationFactory init
INFO: openejb configuration file is '/Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT/conf/tomee.xml'
Apr 15, 2015 12:40:17 PM org.apache.openejb.config.ConfigurationFactory configureService
INFO: Configuring Service(id=Tomcat Security Service, type=SecurityService, provider-id=Tomcat Security Service)
Apr 15, 2015 12:40:17 PM org.apache.openejb.config.ConfigurationFactory configureService
INFO: Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
Apr 15, 2015 12:40:17 PM org.apache.openejb.util.OptionsLog info
INFO: Using 'openejb.system.apps=true'
Apr 15, 2015 12:40:17 PM org.apache.openejb.config.ConfigurationFactory configureApplication
INFO: Configuring enterprise application: openejb
Apr 15, 2015 12:40:17 PM org.apache.openejb.config.InitEjbDeployments deploy
INFO: Using openejb.deploymentId.format '{ejbName}'
Apr 15, 2015 12:40:17 PM org.apache.openejb.config.InitEjbDeployments deploy
INFO: Auto-deploying ejb openejb/Deployer: EjbDeployment(deployment-id=openejb/Deployer)
Apr 15, 2015 12:40:17 PM org.apache.openejb.config.InitEjbDeployments deploy
INFO: Auto-deploying ejb openejb/ConfigurationInfo: EjbDeployment(deployment-id=openejb/ConfigurationInfo)
Apr 15, 2015 12:40:18 PM org.apache.openejb.config.InitEjbDeployments deploy
INFO: Auto-deploying ejb MEJB: EjbDeployment(deployment-id=MEJB)
Apr 15, 2015 12:40:18 PM org.apache.openejb.config.ConfigurationFactory configureService
INFO: Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)
Apr 15, 2015 12:40:18 PM org.apache.openejb.config.AutoConfig createContainer
INFO: Auto-creating a container for bean openejb/Deployer: Container(type=STATELESS, id=Default Stateless Container)
Apr 15, 2015 12:40:18 PM org.apache.openejb.config.AppInfoBuilder build
INFO: Enterprise application "openejb" loaded.
Apr 15, 2015 12:40:18 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating TransactionManager(id=Default Transaction Manager)
Apr 15, 2015 12:40:18 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating SecurityService(id=Tomcat Security Service)
Apr 15, 2015 12:40:18 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Container(id=Default Stateless Container)
Apr 15, 2015 12:40:18 PM org.apache.openejb.assembler.classic.Assembler createAppClassLoader
INFO: Not creating another application classloader for openejb
Apr 15, 2015 12:40:18 PM org.apache.openejb.assembler.classic.Assembler createApplication
INFO: Assembling app: openejb
Apr 15, 2015 12:40:18 PM org.apache.openejb.util.OptionsLog info
INFO: Using 'openejb.jndiname.format={deploymentId}{interfaceType.openejbLegacyName}'
Apr 15, 2015 12:40:18 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=openejb/DeployerBusinessRemote) --> Ejb(deployment-id=openejb/Deployer)
Apr 15, 2015 12:40:18 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=global/openejb/openejb/Deployer!org.apache.openejb.assembler.Deployer) --> Ejb(deployment-id=openejb/Deployer)
Apr 15, 2015 12:40:18 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=global/openejb/openejb/Deployer) --> Ejb(deployment-id=openejb/Deployer)
Apr 15, 2015 12:40:18 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=openejb/ConfigurationInfoBusinessRemote) --> Ejb(deployment-id=openejb/ConfigurationInfo)
Apr 15, 2015 12:40:18 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=global/openejb/openejb/ConfigurationInfo!org.apache.openejb.assembler.classic.cmd.ConfigurationInfo) --> Ejb(deployment-id=openejb/ConfigurationInfo)
Apr 15, 2015 12:40:18 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=global/openejb/openejb/ConfigurationInfo) --> Ejb(deployment-id=openejb/ConfigurationInfo)
Apr 15, 2015 12:40:19 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=MEJB) --> Ejb(deployment-id=MEJB)
Apr 15, 2015 12:40:19 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=global/openejb/MEJB!javax.management.j2ee.ManagementHome) --> Ejb(deployment-id=MEJB)
Apr 15, 2015 12:40:19 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=global/openejb/MEJB) --> Ejb(deployment-id=MEJB)
Apr 15, 2015 12:40:19 PM org.apache.openejb.assembler.classic.Assembler startEjbs
INFO: Created Ejb(deployment-id=openejb/Deployer, ejb-name=openejb/Deployer, container=Default Stateless Container)
Apr 15, 2015 12:40:19 PM org.apache.openejb.assembler.classic.Assembler startEjbs
INFO: Created Ejb(deployment-id=MEJB, ejb-name=MEJB, container=Default Stateless Container)
Apr 15, 2015 12:40:19 PM org.apache.openejb.assembler.classic.Assembler startEjbs
INFO: Created Ejb(deployment-id=openejb/ConfigurationInfo, ejb-name=openejb/ConfigurationInfo, container=Default Stateless Container)
Apr 15, 2015 12:40:19 PM org.apache.openejb.assembler.classic.Assembler startEjbs
INFO: Started Ejb(deployment-id=openejb/Deployer, ejb-name=openejb/Deployer, container=Default Stateless Container)
Apr 15, 2015 12:40:19 PM org.apache.openejb.assembler.classic.Assembler startEjbs
INFO: Started Ejb(deployment-id=MEJB, ejb-name=MEJB, container=Default Stateless Container)
Apr 15, 2015 12:40:19 PM org.apache.openejb.assembler.classic.Assembler startEjbs
INFO: Started Ejb(deployment-id=openejb/ConfigurationInfo, ejb-name=openejb/ConfigurationInfo, container=Default Stateless Container)
Apr 15, 2015 12:40:19 PM org.apache.openejb.assembler.classic.Assembler deployMBean
INFO: Deployed MBean(openejb.user.mbeans:application=openejb,group=org.apache.openejb.assembler.monitoring,name=JMXDeployer)
Apr 15, 2015 12:40:19 PM org.apache.openejb.assembler.classic.Assembler createApplication
INFO: Deployed Application(path=openejb)
Apr 15, 2015 12:40:20 PM org.apache.openejb.server.ServiceManager initServer
INFO: Creating ServerService(id=cxf)
Apr 15, 2015 12:40:20 PM org.apache.openejb.server.ServiceManager initServer
INFO: Creating ServerService(id=cxf-rs)
Apr 15, 2015 12:40:20 PM org.apache.openejb.server.SimpleServiceManager start
INFO:   ** Bound Services **
Apr 15, 2015 12:40:20 PM org.apache.openejb.server.SimpleServiceManager printRow
INFO:   NAME                 IP              PORT
Apr 15, 2015 12:40:20 PM org.apache.openejb.server.SimpleServiceManager start
INFO: -------
Apr 15, 2015 12:40:20 PM org.apache.openejb.server.SimpleServiceManager start
INFO: Ready!
Apr 15, 2015 12:40:20 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 7621 ms
Apr 15, 2015 12:40:20 PM org.apache.tomee.catalina.OpenEJBNamingContextListener bindResource
INFO: Importing a Tomcat Resource with id 'UserDatabase' of type 'org.apache.catalina.UserDatabase'.
Apr 15, 2015 12:40:20 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Resource(id=UserDatabase)
Apr 15, 2015 12:40:20 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Apr 15, 2015 12:40:20 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat (TomEE)/7.0.61 (7.0.0-SNAPSHOT)
Apr 15, 2015 12:40:21 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-61309"]
Apr 15, 2015 12:40:21 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Apr 15, 2015 12:40:21 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 247 ms
Apr 15, 2015 12:40:21 PM org.apache.openejb.client.EventLogger log
INFO: RemoteInitialContextCreated{providerUri=http://localhost:61309/tomee/ejb}
Apr 15, 2015 12:40:21 PM org.apache.openejb.util.JarExtractor extract
INFO: Extracting jar: /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/arquillian-test-working-dir/0/jmx.ear
Apr 15, 2015 12:40:21 PM org.apache.openejb.util.JarExtractor extract
INFO: Extracted path: /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/arquillian-test-working-dir/0/jmx
Apr 15, 2015 12:40:21 PM org.apache.openejb.util.JarExtractor extract
INFO: Extracting jar: /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/arquillian-test-working-dir/0/jmx/arquillian-protocol.war
Apr 15, 2015 12:40:21 PM org.apache.openejb.util.JarExtractor extract
INFO: Extracted path: /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/arquillian-test-working-dir/0/jmx/arquillian-protocol
Apr 15, 2015 12:40:21 PM org.apache.openejb.util.OptionsLog info
INFO: Using 'openejb.deployments.classpath.filter.systemapps=false'
Apr 15, 2015 12:40:23 PM org.apache.openejb.util.OptionsLog info
INFO: Using 'openejb.default.deployment-module=org.apache.openejb.config.WebModule'
Apr 15, 2015 12:40:23 PM org.apache.openejb.util.OptionsLog info
INFO: Using 'openejb.default.deployment-module=org.apache.openejb.config.WebModule'
Apr 15, 2015 12:40:23 PM org.apache.openejb.config.DeploymentsResolver processUrls
INFO: Found EjbModule in classpath: /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/arquillian-test-working-dir/0/jmx/jmx-ejb.jar
Apr 15, 2015 12:40:23 PM org.apache.openejb.util.OptionsLog info
INFO: Using 'openejb.default.deployment-module=org.apache.openejb.config.WebModule'
Apr 15, 2015 12:40:23 PM org.apache.openejb.util.OptionsLog info
INFO: Using 'openejb.default.deployment-module=org.apache.openejb.config.WebModule'
Apr 15, 2015 12:40:23 PM org.apache.openejb.util.OptionsLog info
INFO: Using 'openejb.default.deployment-module=org.apache.openejb.config.WebModule'
Apr 15, 2015 12:40:23 PM org.apache.openejb.config.DeploymentsResolver loadFromClasspath
INFO: Searched 6 classpath urls in 1605 milliseconds.  Average 267 milliseconds per url.
Apr 15, 2015 12:40:23 PM org.apache.openejb.config.ConfigurationFactory configureApplication
INFO: Configuring enterprise application: /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/arquillian-test-working-dir/0/jmx
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.InitEjbDeployments deploy
INFO: Auto-deploying ejb TestEjb: EjbDeployment(deployment-id=TestEjb)
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.ConfigurationFactory configureService
INFO: Configuring Service(id=jmx/Hello, type=Resource, provider-id=jmx/Hello)
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.ConfigurationFactory configureService
INFO: Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.AutoConfig createContainer
INFO: Auto-creating a container for bean jmx-ejb.Comp1256115069: Container(type=MANAGED, id=Default Managed Container)
Apr 15, 2015 12:40:24 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Container(id=Default Managed Container)
Apr 15, 2015 12:40:24 PM org.apache.openejb.core.managed.SimplePassivater init
INFO: Using directory /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote/apache-tomee-plus-7.0.0-SNAPSHOT/temp for stateful session passivation
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.AutoConfig processResourceRef
INFO: Auto-linking resource-ref 'java:comp/env/jmx/Hello' in bean jmx-ejb.Comp1256115069 to Resource(id=jmx/Hello)
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.AutoConfig processResourceRef
INFO: Auto-linking resource-ref 'openejb/Resource/jmx/Hello' in bean jmx-ejb.Comp1256115069 to Resource(id=Hello)
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.AutoConfig processResourceRef
INFO: Auto-linking resource-ref 'openejb/Resource/Hello' in bean jmx-ejb.Comp1256115069 to Resource(id=Hello)
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.ConfigurationFactory configureService
INFO: Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.AutoConfig createContainer
INFO: Auto-creating a container for bean TestEjb: Container(type=SINGLETON, id=Default Singleton Container)
Apr 15, 2015 12:40:24 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Container(id=Default Singleton Container)
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.AutoConfig processResourceRef
INFO: Auto-linking resource-ref 'java:comp/env/jmx/Hello' in bean TestEjb to Resource(id=jmx/Hello)
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.AutoConfig processResourceRef
INFO: Auto-linking resource-ref 'openejb/Resource/jmx/Hello' in bean TestEjb to Resource(id=Hello)
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.AutoConfig processResourceRef
INFO: Auto-linking resource-ref 'openejb/Resource/Hello' in bean TestEjb to Resource(id=Hello)
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.AutoConfig processResourceRef
INFO: Auto-linking resource-ref 'openejb/Resource/jmx/Hello' in bean jmx_org.superbiz.resource.jmx.JMXTest to Resource(id=Hello)
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.AutoConfig processResourceRef
INFO: Auto-linking resource-ref 'openejb/Resource/Hello' in bean jmx_org.superbiz.resource.jmx.JMXTest to Resource(id=Hello)
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.AppInfoBuilder build
INFO: Enterprise application "/Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/arquillian-test-working-dir/0/jmx" loaded.
Apr 15, 2015 12:40:24 PM org.apache.openejb.assembler.classic.Assembler createAppClassLoader
INFO: Creating dedicated application classloader for jmx
Apr 15, 2015 12:40:24 PM org.apache.openejb.assembler.classic.Assembler createApplication
INFO: Assembling app: /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/arquillian-test-working-dir/0/jmx
Apr 15, 2015 12:40:24 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=TestEjbLocalBean) --> Ejb(deployment-id=TestEjb)
Apr 15, 2015 12:40:24 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=global/jmx/jmx-ejb/TestEjb!org.superbiz.resource.jmx.JMXTest$TestEjb) --> Ejb(deployment-id=TestEjb)
Apr 15, 2015 12:40:24 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=global/jmx/jmx-ejb/TestEjb) --> Ejb(deployment-id=TestEjb)
Apr 15, 2015 12:40:24 PM org.apache.openejb.cdi.CdiBuilder initSingleton
INFO: Existing thread singleton service in SystemInstance(): org.apache.openejb.cdi.ThreadSingletonServiceImpl@4a00b74b
Apr 15, 2015 12:40:24 PM org.apache.openejb.cdi.OpenEJBLifecycle startApplication
INFO: OpenWebBeans Container is starting...
Apr 15, 2015 12:40:24 PM org.apache.webbeans.plugins.PluginLoader startUp
INFO: Adding OpenWebBeansPlugin : [CdiPlugin]
Apr 15, 2015 12:40:24 PM org.apache.webbeans.plugins.PluginLoader startUp
Apr 15, 2015 12:40:25 PM org.apache.webbeans.config.BeansDeployer validateInjectionPoints
INFO: All injection points were validated successfully.
Apr 15, 2015 12:40:25 PM org.apache.openejb.cdi.OpenEJBLifecycle startApplication
INFO: OpenWebBeans Container has started, it took 186 ms.
Apr 15, 2015 12:40:25 PM org.apache.openejb.assembler.classic.Assembler startEjbs
INFO: Created Ejb(deployment-id=TestEjb, ejb-name=TestEjb, container=Default Singleton Container)
Apr 15, 2015 12:40:25 PM org.apache.openejb.assembler.classic.Assembler startEjbs
INFO: Started Ejb(deployment-id=TestEjb, ejb-name=TestEjb, container=Default Singleton Container)
Apr 15, 2015 12:40:25 PM org.apache.tomee.catalina.TomcatWebAppBuilder deployWebApps
INFO: using default host: localhost
Apr 15, 2015 12:40:25 PM org.apache.tomee.catalina.TomcatWebAppBuilder init
INFO: ------------------------- localhost -> /arquillian-protocol
Apr 15, 2015 12:40:25 PM org.apache.openejb.util.OptionsLog info
INFO: Using 'openejb.session.manager=org.apache.tomee.catalina.session.QuickSessionManager'
Apr 15, 2015 12:40:25 PM org.apache.openejb.cdi.CdiBuilder initSingleton
INFO: Existing thread singleton service in SystemInstance(): org.apache.openejb.cdi.ThreadSingletonServiceImpl@4a00b74b
Apr 15, 2015 12:40:25 PM org.apache.openejb.cdi.OpenEJBLifecycle startApplication
INFO: OpenWebBeans Container is starting...
Apr 15, 2015 12:40:25 PM org.apache.webbeans.plugins.PluginLoader startUp
INFO: Adding OpenWebBeansPlugin : [CdiPlugin]
Apr 15, 2015 12:40:25 PM org.apache.webbeans.plugins.PluginLoader startUp
Apr 15, 2015 12:40:25 PM org.apache.webbeans.config.BeansDeployer validateInjectionPoints
INFO: All injection points were validated successfully.
Apr 15, 2015 12:40:25 PM org.apache.openejb.cdi.OpenEJBLifecycle startApplication
INFO: OpenWebBeans Container has started, it took 17 ms.
Apr 15, 2015 12:40:25 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Resource(id=jmx/Hello, aliases=Hello)
Apr 15, 2015 12:40:25 PM org.superbiz.resource.jmx.factory.JMXBeanCreator create
INFO: Unable to set value 12345 on field count
Apr 15, 2015 12:40:25 PM org.apache.openejb.assembler.classic.Assembler logUnusedProperties
WARNING: Property "code" not supported by "jmx/Hello"
Apr 15, 2015 12:40:25 PM org.apache.openejb.assembler.classic.Assembler logUnusedProperties
WARNING: Property "name" not supported by "jmx/Hello"
Apr 15, 2015 12:40:25 PM org.apache.openejb.assembler.classic.Assembler logUnusedProperties
WARNING: Property "count" not supported by "jmx/Hello"
Apr 15, 2015 12:40:25 PM org.apache.openejb.assembler.classic.Assembler createApplication
INFO: Deployed Application(path=/Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/arquillian-test-working-dir/0/jmx)
Apr 15, 2015 12:40:26 PM org.apache.openejb.client.EventLogger log
INFO: RemoteInitialContextCreated{providerUri=http://localhost:61309/tomee/ejb}
Apr 15, 2015 12:40:26 PM org.apache.openejb.assembler.classic.Assembler destroyApplication
INFO: Undeploying app: /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/arquillian-test-working-dir/0/jmx
Apr 15, 2015 12:40:27 PM org.apache.openejb.arquillian.common.TomEEContainer undeploy
INFO: cleaning /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/arquillian-test-working-dir/0/jmx.ear
Apr 15, 2015 12:40:27 PM org.apache.openejb.arquillian.common.TomEEContainer undeploy
INFO: cleaning /Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/arquillian-test-working-dir/0/jmx
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 18.464 sec
Apr 15, 2015 12:40:27 PM org.apache.catalina.core.StandardServer await
INFO: A valid shutdown command was received via the shutdown port. Stopping the Server instance.
Apr 15, 2015 12:40:27 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-61309"]
Apr 15, 2015 12:40:27 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
Apr 15, 2015 12:40:27 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Apr 15, 2015 12:40:27 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["http-bio-61309"]
Apr 15, 2015 12:40:27 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["ajp-bio-8009"]
Apr 15, 2015 12:40:27 PM org.apache.openejb.server.SimpleServiceManager stop
INFO: Stopping server services
Apr 15, 2015 12:40:27 PM org.apache.openejb.assembler.classic.Assembler destroyApplication
INFO: Undeploying app: openejb
Apr 15, 2015 12:40:27 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-bio-61309"]
Apr 15, 2015 12:40:27 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["ajp-bio-8009"]

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
as seguintes linhas mostrando a criação do recurso.
Apr 15, 2015 12:40:24 PM org.apache.openejb.config.ConfigurationFactory configureService
INFO: Configuring Service(id=jmx/Hello, type=Resource, provider-id=jmx/Hello)