:index-group: JMX
:jbake-type: page
:jbake-status: status=published
= Custom resources in an EAR archive

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.

[source,java]
----
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.

[source,java]
----
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;
    }
}
----

NOTE: 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:

[source,xml]
----
<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>
----

NOTE: 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.

[source,java]
----
@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.

[source,java]
----
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.

[source,console]
----
-------------------------------------------------------
 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
----

NOTE: as seguintes linhas mostrando a criação do recurso.

[source,java]
----
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)
----
