<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Apache TomEE</title>
	<meta name="description"
		  content="Apache TomEE is a lightweight, yet powerful, JavaEE Application server with feature rich tooling." />
	<meta name="keywords" content="tomee,asf,apache,javaee,jee,shade,embedded,test,junit,applicationcomposer,maven,arquillian" />
	<meta name="author" content="Luka Cvetinovic for Codrops" />
	<link rel="icon" href="../../favicon.ico">
	<link rel="icon"  type="image/png" href="../../favicon.png">
	<meta name="msapplication-TileColor" content="#80287a">
	<meta name="theme-color" content="#80287a">
	<link rel="stylesheet" type="text/css" href="../../css/normalize.css">
	<link rel="stylesheet" type="text/css" href="../../css/bootstrap.css">
	<link rel="stylesheet" type="text/css" href="../../css/owl.css">
	<link rel="stylesheet" type="text/css" href="../../css/animate.css">
	<link rel="stylesheet" type="text/css" href="../../fonts/font-awesome-4.1.0/css/font-awesome.min.css">
	<link rel="stylesheet" type="text/css" href="../../fonts/eleganticons/et-icons.css">
	<link rel="stylesheet" type="text/css" href="../../css/jqtree.css">
	<link rel="stylesheet" type="text/css" href="../../css/idea.css">
	<link rel="stylesheet" type="text/css" href="../../css/cardio.css">

	<script type="text/javascript">

      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-2717626-1']);
      _gaq.push(['_setDomainName', 'apache.org']);
      _gaq.push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();

    </script>
</head>

<body>
    <div class="preloader">
		<img src="../../img/loader.gif" alt="Preloader image">
	</div>
	    <nav class="navbar">
		<div class="container">
		  <div class="row">          <div class="col-md-12">

			<!-- Brand and toggle get grouped for better mobile display -->
			<div class="navbar-header">
				<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
					<span class="sr-only">Toggle navigation</span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
				</button>
				<a class="navbar-brand" href="/">
				    <span>

				    
                        <img src="../../img/logo-active.png">
                    

                    </span>
				    Apache TomEE
                </a>
			</div>
			<!-- Collect the nav links, forms, and other content for toggling -->
			<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
				<ul class="nav navbar-nav navbar-right main-nav">
					<li><a href="../../docs.html">Documentation</a></li>
					<li><a href="../../community/index.html">Community</a></li>
					<li><a href="../../security/security.html">Security</a></li>
					<li><a href="../../download-ng.html">Downloads</a></li>
				</ul>
			</div>
			<!-- /.navbar-collapse -->
		   </div></div>
		</div>
		<!-- /.container-fluid -->
	</nav>


    <div id="main-block" class="container main-block">
        <div class="row title">
          <div class="col-md-12">
            <div class='page-header'>
              
              <h1>Custom resources in an EAR archive</h1>
            </div>
          </div>
        </div>
        <div class="row">
            
            <div class="col-md-12">
                <p>TomEE allows you to define your own resources within your application, and declare them in <code>META-INF/resources.xml</code>. This allows you do inject these resource into any managed component within your application.</p>
<p>In addition to this, you can also define a <code>create</code> method on either the resource itself, or on a POJO that acts as a factory. This example demonstrates using the <code>create</code> method to additionally register the resource as a JMX MBean, as well as make it available for injection.</p>
<h2>Resource</h2>
<p>Custom resources can be defined using very simple Java classes. In this particular instance, as the application also wants to register this resource as an MBean, the resource class needs to follow the MBean specification.</p>
<pre><code>public class Hello implements HelloMBean {

    private AtomicInteger count = new AtomicInteger(0);

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

        return &quot;Hello, &quot; + 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();

}
</code></pre>
<h2>Create method</h2>
<p>To avoid adding the logic to register the resource as an MBean in every resource, the application provides a single class with a create() method that takes care of this logic for us.</p>
<pre><code>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(&quot;code&quot;);
        final String name = properties.getProperty(&quot;name&quot;);

        requireNotNull(code);
        requireNotNull(name);

        try {
            final Class&lt;?&gt; 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(&quot;Unable to set value %s on field %s&quot;, 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(&quot;Unable to find class &quot; + code);
            throw new MBeanRegistrationException(e);
        } catch (final InstantiationException e) {
            LOGGER.severe(&quot;Unable to create instance of class &quot; + code);
            throw new MBeanRegistrationException(e);
        } catch (final IllegalAccessException e) {
            LOGGER.severe(&quot;Illegal access: &quot; + code);
            throw new MBeanRegistrationException(e);
        } catch (final MalformedObjectNameException e) {
            LOGGER.severe(&quot;Malformed MBean name: &quot; + name);
            throw new MBeanRegistrationException(e);
        } catch (final InstanceAlreadyExistsException e) {
            LOGGER.severe(&quot;Instance already exists: &quot; + name);
            throw new MBeanRegistrationException(e);
        } catch (final NotCompliantMBeanException e) {
            LOGGER.severe(&quot;Class is not a valid MBean: &quot; + code);
            throw new MBeanRegistrationException(e);
        } catch (final javax.management.MBeanRegistrationException e) {
            LOGGER.severe(&quot;Error registering &quot; + name + &quot;, &quot; + code);
            throw new MBeanRegistrationException(e);
        }
    }

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

    public Properties getProperties() {
        return properties;
    }

    public void setProperties(final Properties properties) {
        this.properties = properties;
    }
}
</code></pre>
<p>Note that this class uses the properties defined in the <Resource> configuration (below), combined with reflection, to instantiate the resource, and set its attributes. The code above requires two properties <code>code</code> and <code>name</code> in order to know what class to create, and the JMX name to register it under.</p>
<h2>Resource</h2>
<p>The resource can be defined in <code>META-INF/resources.xml</code> as follows:</p>
<pre><code>&lt;Resources&gt;
  &lt;Resource id=&quot;Hello&quot; class-name=&quot;org.superbiz.resource.jmx.factory.JMXBeanCreator&quot; factory-name=&quot;create&quot;&gt;
    code org.superbiz.resource.jmx.resources.Hello
    name superbiz.test:name=Hello
    count 12345
  &lt;/Resource&gt;
&lt;/Resources&gt;
</code></pre>
<p>Note that the class-name attribute refers to the factory class, and not the resource. Once the resource has been created and bound in TomEE's JNDI tree the factory is no longer used.</p>
<h2>Using @Resource for injection</h2>
<p>The test case for this example demonstrates injection into an EJB as one way of accessing the resource, and also accessing the resource via JMX.</p>
<pre><code>@RunWith(Arquillian.class)
public class JMXTest {

    @EJB
    private TestEjb ejb;

    @Deployment
    public static EnterpriseArchive createDeployment() {

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

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

        return ear;
    }

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

        Assert.assertNotNull(ejb);

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

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

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

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

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

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

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

        @Resource(name=&quot;jmx/Hello&quot;)
        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();
        }
    }
}
</code></pre>
<p>The name <code>&lt;appname&gt;/&lt;resource-id&gt;</code> attribute is used on the <code>@Resource</code> annotation to perform the injection. No further configuration is needed to inject the resource.</p>
<h1>Additional properties</h1>
<p>In addition to the <code>code</code> and <code>name</code> properties that the code above uses to instantiate the resource, TomEE itself provides some properties to provide more control over the creation of resources.</p>
<p>Resources are typically discovered, created, and bound to JNDI very early on in the deployment process, as other components depend on them. This may lead to problems where the final classpath for the application has not yet been determined, and therefore TomEE is unable to load your custom resource. </p>
<p>The following properties can be used to change this behavior.</p>
<ul>
  <li>Lazy</li>
</ul>
<p>This is a boolean value, which when true, creates a proxy that defers the actual instantiation of the resource until the first time it is looked up from JNDI. This can be useful if the resource requires the application classpath, or to improve startup time by not fully initializing resources that might not be used.</p>
<ul>
  <li>UseAppClassLoader</li>
</ul>
<p>This boolean value forces a lazily instantiated resource to use the application classloader, instead of the classloader available when the resources were first processed.</p>
<ul>
  <li>InitializeAfterDeployment</li>
</ul>
<p>This boolean setting forces a resource created with the Lazy property to be instantiated once the application has started, as opposed to waiting for it to be looked up. Use this flag if you require the resource to be loaded, irrespective of whether it is injected into a managed component or manually looked up.</p>
<p>By default, all of these settings are <code>false</code>, unless TomEE encounters a custom application resource that cannot be instantiated until the application has started. In this case, it will set these three flags to <code>true</code>, unless the <code>Lazy</code> flag has been explicitly set.</p>
<h1>PostConstruct / PreDestroy</h1>
<p>As an alternative to using a factory method, you can use @PostConstruct and @PreDestroy methods within your resource class (note that you cannot use this within a factory class) to manage any additional creation or cleanup activities. TomEE will automatically call these methods when the application is started and destroyed. Using @PostConstruct will effectively force a lazily loaded resource to be instantiated when the application is starting - in the same way that the <code>InitializeAfterDeployment</code> property does.</p>
<pre><code>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(&quot;code&quot;);
        final String name = properties.getProperty(&quot;name&quot;);

        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(&quot;Malformed MBean name: &quot; + name);
            throw new MBeanRegistrationException(e);
        } catch (final InstanceAlreadyExistsException e) {
            LOGGER.severe(&quot;Instance already exists: &quot; + name);
            throw new MBeanRegistrationException(e);
        } catch (final NotCompliantMBeanException e) {
            LOGGER.severe(&quot;Class is not a valid MBean: &quot; + code);
            throw new MBeanRegistrationException(e);
        } catch (final javax.management.MBeanRegistrationException e) {
            LOGGER.severe(&quot;Error registering &quot; + name + &quot;, &quot; + code);
            throw new MBeanRegistrationException(e);
        }
    }

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

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

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

    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(&quot;Name cannot be null&quot;);
        }

        return &quot;Hello, &quot; + name;
    }

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

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

    @Override
    public void increment() {
        count++;
    }
}
</code></pre>
<h1>Running</h1>
<p>Running the example can be done from maven with a simple 'mvn clean install' command run from the 'resources-jmx-example' directory.</p>
<p>When run you should see output similar to the following.</p>
<pre><code>-------------------------------------------------------
 T E S T 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 &#39;/Users/jgallimore/.m2/repository/org/apache/openejb/apache-tomee/7.0.0-SNAPSHOT/apache-tomee-7.0.0-SNAPSHOT-plus.zip&#39; to &#39;/Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/apache-tomee-remote&#39;
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 [&quot;http-bio-61309&quot;]
Apr 15, 2015 12:40:14 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [&quot;ajp-bio-8009&quot;]
Apr 15, 2015 12:40:16 PM org.apache.openejb.util.OptionsLog info
INFO: Using &#39;openejb.jdbc.datasource-creator=org.apache.tomee.jdbc.TomEEDataSourceCreator&#39;
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance &lt;init&gt;
INFO: ********************************************************************************
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance &lt;init&gt;
INFO: OpenEJB http://tomee.apache.org/
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance &lt;init&gt;
INFO: Startup: Wed Apr 15 12:40:16 BST 2015
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance &lt;init&gt;
INFO: Copyright 1999-2013 (C) Apache OpenEJB Project, All Rights Reserved.
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance &lt;init&gt;
INFO: Version: 7.0.0-SNAPSHOT
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance &lt;init&gt;
INFO: Build date: 20150415
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance &lt;init&gt;
INFO: Build time: 11:37
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance &lt;init&gt;
INFO: ********************************************************************************
Apr 15, 2015 12:40:16 PM org.apache.openejb.OpenEJB$Instance &lt;init&gt;
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 &lt;init&gt;
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 &#39;/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&#39;
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 &#39;openejb.system.apps=true&#39;
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 &#39;{ejbName}&#39;
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 &quot;openejb&quot; 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 &#39;openejb.jndiname.format={deploymentId}{interfaceType.openejbLegacyName}&#39;
Apr 15, 2015 12:40:18 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=openejb/DeployerBusinessRemote) --&gt; 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) --&gt; 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) --&gt; Ejb(deployment-id=openejb/Deployer)
Apr 15, 2015 12:40:18 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=openejb/ConfigurationInfoBusinessRemote) --&gt; 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) --&gt; 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) --&gt; Ejb(deployment-id=openejb/ConfigurationInfo)
Apr 15, 2015 12:40:19 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=MEJB) --&gt; 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) --&gt; Ejb(deployment-id=MEJB)
Apr 15, 2015 12:40:19 PM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=global/openejb/MEJB) --&gt; 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 &#39;UserDatabase&#39; of type &#39;org.apache.catalina.UserDatabase&#39;.
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 [&quot;http-bio-61309&quot;]
Apr 15, 2015 12:40:21 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler [&quot;ajp-bio-8009&quot;]
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 &#39;openejb.deployments.classpath.filter.systemapps=false&#39;
Apr 15, 2015 12:40:23 PM org.apache.openejb.util.OptionsLog info
INFO: Using &#39;openejb.default.deployment-module=org.apache.openejb.config.WebModule&#39;
Apr 15, 2015 12:40:23 PM org.apache.openejb.util.OptionsLog info
INFO: Using &#39;openejb.default.deployment-module=org.apache.openejb.config.WebModule&#39;
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 &#39;openejb.default.deployment-module=org.apache.openejb.config.WebModule&#39;
Apr 15, 2015 12:40:23 PM org.apache.openejb.util.OptionsLog info
INFO: Using &#39;openejb.default.deployment-module=org.apache.openejb.config.WebModule&#39;
Apr 15, 2015 12:40:23 PM org.apache.openejb.util.OptionsLog info
INFO: Using &#39;openejb.default.deployment-module=org.apache.openejb.config.WebModule&#39;
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 &#39;java:comp/env/jmx/Hello&#39; 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 &#39;openejb/Resource/jmx/Hello&#39; 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 &#39;openejb/Resource/Hello&#39; 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 &#39;java:comp/env/jmx/Hello&#39; 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 &#39;openejb/Resource/jmx/Hello&#39; 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 &#39;openejb/Resource/Hello&#39; 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 &#39;openejb/Resource/jmx/Hello&#39; 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 &#39;openejb/Resource/Hello&#39; 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 &quot;/Users/jgallimore/tmp/tomee-1.7.x/examples/resources-jmx-example/resources-jmx-ejb/target/arquillian-test-working-dir/0/jmx&quot; 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) --&gt; 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) --&gt; 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) --&gt; 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 -&gt; /arquillian-protocol
Apr 15, 2015 12:40:25 PM org.apache.openejb.util.OptionsLog info
INFO: Using &#39;openejb.session.manager=org.apache.tomee.catalina.session.QuickSessionManager&#39;
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 &quot;code&quot; not supported by &quot;jmx/Hello&quot;
Apr 15, 2015 12:40:25 PM org.apache.openejb.assembler.classic.Assembler logUnusedProperties
WARNING: Property &quot;name&quot; not supported by &quot;jmx/Hello&quot;
Apr 15, 2015 12:40:25 PM org.apache.openejb.assembler.classic.Assembler logUnusedProperties
WARNING: Property &quot;count&quot; not supported by &quot;jmx/Hello&quot;
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 [&quot;http-bio-61309&quot;]
Apr 15, 2015 12:40:27 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler [&quot;ajp-bio-8009&quot;]
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 [&quot;http-bio-61309&quot;]
Apr 15, 2015 12:40:27 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler [&quot;ajp-bio-8009&quot;]
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 [&quot;http-bio-61309&quot;]
Apr 15, 2015 12:40:27 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler [&quot;ajp-bio-8009&quot;]

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
</code></pre>
<p>Note the following lines showing the creation of the resource.</p>
<pre><code>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)
</code></pre>
            </div>
            
        </div>
    </div>
<footer>
		<div class="container">
			<div class="row">
				<div class="col-sm-6 text-center-mobile">
					<h3 class="white">Be simple.  Be certified. Be Tomcat.</h3>
					<h5 class="light regular light-white">"A good application in a good server"</h5>
					<ul class="social-footer">
						<li><a href="https://www.facebook.com/ApacheTomEE/"><i class="fa fa-facebook"></i></a></li>
						<li><a href="https://twitter.com/apachetomee"><i class="fa fa-twitter"></i></a></li>
						<li><a href="https://plus.google.com/communities/105208241852045684449"><i class="fa fa-google-plus"></i></a></li>
					</ul>
				</div>
				<div class="col-sm-6 text-center-mobile">
					<div class="row opening-hours">
						<div class="col-sm-3 text-center-mobile">
							<h5><a href="../../latest/docs/" class="white">Documentation</a></h5>
							<ul class="list-unstyled">
								<li><a href="../../latest/docs/admin/configuration/index.html" class="regular light-white">How to configure</a></li>
								<li><a href="../../latest/docs/admin/file-layout.html" class="regular light-white">Dir. Structure</a></li>
								<li><a href="../../latest/docs/developer/testing/index.html" class="regular light-white">Testing</a></li>
								<li><a href="../../latest/docs/admin/cluster/index.html" class="regular light-white">Clustering</a></li>
							</ul>
						</div>
						<div class="col-sm-3 text-center-mobile">
							<h5><a href="../../latest/examples/" class="white">Examples</a></h5>
							<ul class="list-unstyled">
								<li><a href="../../latest/examples/simple-cdi-interceptor.html" class="regular light-white">CDI Interceptor</a></li>
								<li><a href="../../latest/examples/rest-cdi.html" class="regular light-white">REST with CDI</a></li>
								<li><a href="../../latest/examples/ejb-examples.html" class="regular light-white">EJB</a></li>
								<li><a href="../../latest/examples/jsf-managedBean-and-ejb.html" class="regular light-white">JSF</a></li>
							</ul>
						</div>
						<div class="col-sm-3 text-center-mobile">
							<h5><a href="../../community/index.html" class="white">Community</a></h5>
							<ul class="list-unstyled">
								<li><a href="../../community/contributors.html" class="regular light-white">Contributors</a></li>
								<li><a href="../../community/social.html" class="regular light-white">Social</a></li>
								<li><a href="../../community/sources.html" class="regular light-white">Sources</a></li>
							</ul>
						</div>
						<div class="col-sm-3 text-center-mobile">
							<h5><a href="../../security/index.html" class="white">Security</a></h5>
							<ul class="list-unstyled">
								<li><a href="http://apache.org/security" target="_blank" class="regular light-white">Apache Security</a></li>
								<li><a href="http://apache.org/security/projects.html" target="_blank" class="regular light-white">Security Projects</a></li>
								<li><a href="http://cve.mitre.org" target="_blank" class="regular light-white">CVE</a></li>
							</ul>
						</div>
					</div>
				</div>
			</div>
			<div class="row bottom-footer text-center-mobile">
				<div class="col-sm-12 light-white">
					<p>Copyright &copy; 1999-2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
				</div>
			</div>
		</div>
	</footer>
	<!-- Holder for mobile navigation -->
	<div class="mobile-nav">
        <ul>
          <li><a hef="../../latest/docs/admin/index.html">Administrators</a>
          <li><a hef="../../latest/docs/developer/index.html">Developers</a>
          <li><a hef="../../latest/docs/advanced/index.html">Advanced</a>
          <li><a hef="../../community/index.html">Community</a>
        </ul>
		<a href="#" class="close-link"><i class="arrow_up"></i></a>
	</div>
	<!-- Scripts -->
	<script src="../../js/jquery-1.11.1.min.js"></script>
	<script src="../../js/owl.carousel.min.js"></script>
	<script src="../../js/bootstrap.min.js"></script>
	<script src="../../js/wow.min.js"></script>
	<script src="../../js/typewriter.js"></script>
	<script src="../../js/jquery.onepagenav.js"></script>
	<script src="../../js/tree.jquery.js"></script>
	<script src="../../js/highlight.pack.js"></script>
    <script src="../../js/main.js"></script>
		</body>

</html>

