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

    <meta charset="UTF-8">
      <title></title>
    <meta name="description" content="Apache TomEE">
    <meta name="author" content="Apache TomEE">
    <meta name="google-translate-customization" content="f36a520c08f4c9-0a04e86a9c075ce9-g265f3196f697cf8f-10">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Expires" content="0">
    <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate, max-age=0">

    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
    <!--[if lt IE 9]>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <!-- Le styles -->
    <link href="./resources/css/bootstrap.css" rel="stylesheet">
    <link href="./resources/css/prettify.css" rel="stylesheet">
    <!--link href="./resources/css/bootstrap-mods.css" rel="stylesheet"-->
    <link href="./resources/css/main.css" rel="stylesheet">
    <link href="./resources/font-awesome-4.6.3/css/font-awesome.min.css" rel="stylesheet">

    <script type="text/javascript">
        var t = encodeURIComponent(document.title.replace(/^\s+|\s+$/g,""));
        var u = encodeURIComponent(""+document.URL);
    
      function fbshare () {
          window.open(
                  "http://www.facebook.com/sharer/sharer.php?u="+u,
                  'Share on Facebook',
                  'width=640,height=426');
      };
      function gpshare () {
          window.open(
                  "https://plus.google.com/share?url="+u,
                  'Share on Google+',
                  'width=584,height=385');
      };
      function twshare () {
          window.open(
                  "https://twitter.com/intent/tweet?url="+u+"&text="+t,
                  'Share on Twitter',
                  'width=800,height=526');
      };
      function pinshare () {
          window.open("//www.pinterest.com/pin/create/button/?url="+u+"&media=http%3A%2F%2Ftomee.apache.org%2Fresources%2Fimages%2Ffeather-logo.png&description="+t,
                  'Share on Pinterest',
                  'width=800,height=526');
      };
    </script>

    <!-- Le fav and touch icons -->
    <link rel="shortcut icon" href="./favicon.ico">
    <link rel="apple-touch-icon" href="./resources/images/apple-touch-icon.png">
    <link rel="apple-touch-icon" sizes="72x72" href="./resources/images/apple-touch-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="114x114" href="./resources/images/apple-touch-icon-114x114.png">

    <script src="./resources/js/prettify.js" type="text/javascript"></script>
    <script src="./resources/js/jquery-latest.js"></script>
    <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
    <script src="./resources/js/common.js"></script>
    <script src="./resources/js/prettyprint.js"></script>
    <!--script src="//assets.pinterest.com/js/pinit.js" type="text/javascript" async></script//-->
    
    <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="topbar" data-dropdown="dropdown">
      <div class="fill">
        <div class="container">
          <a class="brand" href="./index.html">Apache TomEE</a>
          <ul class="nav">
              <li class="dropdown">
                  <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                  Apache
                      <b class="caret"></b>
                  </a>
                  <ul class="dropdown-menu">
                     <!-- <li><a href="./misc/whoweare.html">Who we are?</a></li> -->
                     <!-- <li><a href="./misc/heritage.html">Heritage</a></li> -->
                     <li><a href="http://www.apache.org">Apache Home</a></li>
                     <!-- <li><a href="./misc/resources.html">Resources</a></li> -->
                     <li><a href="./misc/contact.html">Contact</a></li>
                     <li><a href="./misc/legal.html">Legal</a></li>
                     <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
                     <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
                     <li class="divider"/>
                     <li><a href="http://www.apache.org/security">Security</a></li>
                  </ul>
              </li>
              <li><a href="./index.html">Home</a></li>
              <li><a href="./downloads.html">Downloads</a></li>
              <li><a href="./documentation.html">Documentation</a></li>
              <li><a href="./examples-trunk/index.html">Examples</a></li>
              <li><a href="./support.html">Support</a></li>
              <li><a href="./contribute.html">Contribute</a></li>
              <li><a href="./security/index.html">Security</a></li>
          </ul>

            <!-- Google CSE Search Box Begins  -->
            <FORM class="pull-right" id="searchbox_010475492895890475512:_t4iqjrgx90" action="http://www.google.com/cse">
                <INPUT type="hidden" name="cx" value="010475492895890475512:_t4iqjrgx90">
                <INPUT type="hidden" name="cof" value="FORID:0">
                <INPUT size="18" width="130" style="width:130px" name="q" type="text" placeholder="Search">
            </FORM>
            <!--<SCRIPT type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_010475492895890475512:_t4iqjrgx90"></SCRIPT>-->
            <!-- Google CSE Search Box Ends -->
        </div>
      </div>
    </div>

    <div class="container">
    

<div class="page-header">
    <small><a href="./index.html">Home</a></small><br>
    <h1>

        <div style="float: right; position: relative; bottom: -10px; ">
            <a onclick="javascript:gpshare()" class="gp-share sprite" title="Share on Google+">share [gp]</a>
            <a onclick="javascript:fbshare()" class="fb-share sprite" title="Share on Facebook">share [fb]</a>
            <a onclick="javascript:twshare()" class="tw-share sprite" title="Share on Twitter">share [tw]</a>
            <a onclick="javascript:pinshare()" class="pin-share sprite" title="Share on Pinterest">share [pin]</a>
            <a data-toggle="modal" href="#edit" class="edit-page" title="Contribute to this Page">contribute</a>
        </div>
    </h1>
</div>

<p><a name="ResourceInjection-Overview"></a></p>

<h1>@Resource Overview</h1>

<p>This example demonstrates the use of the injection of environment entries
using <span style="color: #217D18;"><strong>@Resource</strong></span> annotation.</p>

<p>The EJB 3.0 specification (<em>EJB Core Contracts and Requirements</em>) section
16.2.2 reads:</p>

<p><em>A field or method of a bean class may be annotated to request that an entry from the bean's environment be injected. Any of the types of resources or other environment entries described in this chapter may be injected. Injection may also be requested using entries in the deployment descriptor corresponding to each of these
resource types.</em></p>

<p><em>Environment entries may also be injected into the bean through bean methods that follow the naming conventions for JavaBeans properties. The annotation is applied to the set method for the property, which is the method that is called to inject the environment entry. The JavaBeans property name (not the method name) is used as the default JNDI name.</em></p>

<p>The <em>PurchaseOrderBean</em> class shows use of field-level <strong>@Resource</strong>
annotation.</p>

<p>The <em>InvoiceBean</em> class shows the use of method-level <strong>@Resource</strong>
annotation.</p>

<p>The source for this example can be checked out from svn:</p>

<blockquote>
  <p>$ svn co
  http://svn.apache.org/repos/asf/tomee/tomee/trunk/examples/injection-of-env-entry</p>
</blockquote>

<p>To run it change your working directory to the directory
<em>injection-of-env-entry</em> and run the following maven2 commands:</p>

<blockquote>
  <p>$ cd injection-of-env-entry</p>
  
  <p>$ mvn clean install</p>
</blockquote>

<p><a name="ResourceInjection-TheCode"></a></p>

<h1>The Code</h1>

<p><a name="ResourceInjection-Injectionthroughfield(field-levelinjection)"></a></p>

<h2>Injection through field (field-level injection)</h2>

<p>The <em>maxLineItem</em> field in <em>PurchaseOrderBean</em> class is annotated with <strong>@Resource</strong> annotation to inform the EJB container the location where in the code the injection of a simple environment entry should take place. The default value of 10 is assigned. You can modify the value of the environment entries at deployment time using deployment descriptor (<strong>ejb-jar.xml</strong>).</p>

<p><a name="ResourceInjection-@Resourceannotationofafield"></a></p>

<h4>@Resource annotation of a field</h4>

<pre><code>@Resource
int maxLineItems = 10;
</code></pre>

<p><a name="ResourceInjection-Injectionthroughasettermethod(method-levelinjection)"></a></p>

<h2>Injection through a setter method (method-level injection)</h2>

<p>The <em>setMaxLineItem</em> method in <em>InvoiceBean</em> class is annotated with
<em>@Resource</em> annotation to inject the simple environment entry. Only setters
can be used as a way to inject environment entry values. </p>

<p>You could look up the env-entry using JNDI lookup() method and the
following name:</p>

<pre><code>java:comp/env/org.apache.openejb.examples.resource.InvoiceBean/maxLineItems
</code></pre>

<p>The pattern is to combine the fully-qualified class name and the name of a
instance field (or a name of the setter method without <em>set</em> prefix and the
first letter lowercased).</p>

<p><a name="ResourceInjection-@Resourceannotationofasettermethod"></a></p>

<h4>@Resource annotation of a setter method</h4>

<pre><code>@Resource
public void setMaxLineItems(int maxLineItems) {
    this.maxLineItems = maxLineItems;
}
</code></pre>

<p><a name="ResourceInjection-env-entryinejb-jar.xml"></a></p>

<h4>Using env-entry in ejb-jar.xml</h4>

<pre><code>&lt;env-entry&gt;
    &lt;description&gt;The maximum number of line items per invoice.&lt;/description&gt;        
    &lt;env-entry-name&gt;org.apache.openejb.examples.injection.InvoiceBean/maxLineItems&lt;/env-entry-name&gt;
    &lt;env-entry-type&gt;java.lang.Integer&lt;/env-entry-type&gt;
    &lt;env-entry-value&gt;15&lt;/env-entry-value&gt;
&lt;/env-entry&gt;
</code></pre>

<p><a name="ResourceInjection-Using@Resourceannotatedenv-entry"></a></p>

<h4>Using @Resource annotated env-entry</h4>

<pre><code>public void addLineItem(LineItem item) throws TooManyItemsException {
   if (item == null) {
      throw new IllegalArgumentException("Line item must not be null");
   }

   if (itemCount &lt;= maxLineItems) {
      items.add(item);
      itemCount++;
   } else {
      throw new TooManyItemsException("Number of items exceeded the maximum limit");
   }
}
</code></pre>

<p><a name="ResourceInjection-JUnitTest"></a></p>

<h1>JUnit Test</h1>

<p>Writing an JUnit test for this example is quite simple. We need just to
write a setup method to create and initialize the InitialContext, and then
write our test methods.</p>

<p><a name="ResourceInjection-Testfixture"></a></p>

<h4>Test fixture</h4>

<pre><code>protected void setUp() throws Exception {
    Properties properties = new Properties();
    properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
    properties.setProperty("openejb.deployments.classpath.include", ".*resource-injection.*");
    initialContext = new InitialContext(properties);
}
</code></pre>

<p><a name="ResourceInjection-Testmethods"></a></p>

<h4>Test methods</h4>

<pre><code>public void testAddLineItem() throws Exception {
    Invoice order = (Invoice)initialContext.lookup("InvoiceBeanBusinessRemote");
    assertNotNull(order);
    LineItem item = new LineItem("ABC-1", "Test Item");

    try {
    order.addLineItem(item);
    } catch (TooManyItemsException tmie) {
    fail("Test failed due to: " + tmie.getMessage());
    }
}
</code></pre>

<p><a name="ResourceInjection-Running"></a></p>

<h1>Running</h1>

<p>Running the example is fairly simple. Just execute the following commands:</p>

<blockquote>
  <p>$ cd injection-of-env-entry</p>
  
  <p>$ mvn clean test</p>
</blockquote>

<pre><code>-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.superbiz.injection.PurchaseOrderBeanTest
Apache OpenEJB 3.0.0-SNAPSHOT    build: 20071218-01:41
http://tomee.apache.org/
INFO - openejb.home = c:\oss\openejb3\examples\injection-of-env-entry
INFO - openejb.base = c:\oss\openejb3\examples\injection-of-env-entry
WARN - Cannot find the configuration file [conf/openejb.xml].  Will attempt to create one for the beans deployed.
INFO - Configuring Service(id=Default Security Service,type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Configuring Service(id=Default JDK 1.3 ProxyFactory, type=ProxyFactory, provider-id=Default JDK 1.3 ProxyFactory)
INFO - Found EjbModule in classpath: c:\oss\openejb3\examples\injection-of-env-entry\target\classes
INFO - Configuring app: c:\oss\openejb3\examples\injection-of-env-entry\target\classes
INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)
INFO - Auto-creating a container for bean InvoiceBean: Container(type=STATEFUL, id=Default Stateful Container)
INFO - Loaded Module: c:\oss\openejb3\examples\injection-of-env-entry\target\classes
INFO - Assembling app: c:\oss\openejb3\examples\injection-of-env-entry\target\classes
INFO - Jndi(name=InvoiceBeanRemote) --&gt; Ejb(deployment-id=InvoiceBean)
INFO - Jndi(name=PurchaseOrderBeanRemote) --&gt; Ejb(deployment-id=PurchaseOrderBean)
INFO - Created Ejb(deployment-id=InvoiceBean, ejb-name=InvoiceBean, container=Default Stateful Container)
INFO - Created Ejb(deployment-id=PurchaseOrderBean, ejb-name=PurchaseOrderBean, container=Default Stateful Container)
INFO - Deployed Application(path=c:\oss\openejb3\examples\injection-of-env-entry\target\classes)
INFO - OpenEJB ready.
OpenEJB ready.
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.859 sec
Running org.superbiz.injection.InvoiceBeanTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 sec

Results :

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
</code></pre>




        <div id="edit" class="modal hide fade in" style="display: none; ">
            <div class="modal-header">
                <a class="close" data-dismiss="modal">x</a>

                <h3>Thank you for contributing to the documentation!</h3>
            </div>
            <div class="modal-body">
                <h4>Any help with the documentation is greatly appreciated.</h4>
                <p>All edits are reviewed before going live, so feel free to do much more than fix typos or links.  If you see a page that could benefit from an entire rewrite, we'd be thrilled to review it.  Don't be surprised if we like it so much we ask you for help with other pages :)</p>
                <small>NOTICE: unless indicated otherwise on the pages in question, all editable content available from apache.org is presumed to be licensed under the Apache License (AL) version 2.0 and hence all submissions to apache.org treated as formal Contributions under the license terms.</small>
                <!--[if gt IE 6]>
                <h4>Internet Explorer Users</h4>
                <p>If you are not an Apache committer, click the Yes link and enter a <i>anonymous</i> for the username and leave the password empty</p>
                <![endif]-->

            </div>
            <div class="modal-footer">
                Do you have an Apache ID?
                <a href="javascript:void(location.href='https://cms.apache.org/redirect?uri='+escape(location.href))" class="btn">Yes</a>
                <a href="javascript:void(location.href='https://anonymous:@cms.apache.org/redirect?uri='+escape(location.href))" class="btn">No</a>
            </div>
        </div>
        <script src="./resources/js/bootstrap-modal.js"></script>

        <footer>
            <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>
        </footer>

    </div> <!-- /container -->

    <!-- Javascript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="./resources/js/bootstrap-dropdown.js"></script>

  </body>
</html>
