blob: 0ba39258f9f6cb33ec805ece20a8d0ca8b857156 [file] [log] [blame]
: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)
----