12 Replies Latest reply on Dec 4, 2003 2:20 PM by jonlee

    Where is the JVM boundary?

    martin0

      ...in terms of deployment.

      Is it an EAR, a WAR, a JAR file?

      Also where is the boundary of an application I deploy jars and wars not in an ear?

      Thanks
      Martin

        • 1. Re: Where is the JVM boundary?
          jonlee

          I'm not sure where you are going with this. A J2EE application is not bounded by the JVM, in theory. You can have components in different containers, in different JVMs, in different physical locations.

          As long as a component can be located by the "caller", it can be used by the caller. J2EE embodies a loosely coupled architecture, while components themselves embody high cohesiveness. A system (application) is represented by all those components that are required by and participate in the action of the system achieving its purpose. So if your JARs and WARs are necessary for the system (application) to achieve its stated goal, then that is the boundary of the system.

          In many ways, an EAR is an artificial construct - it physically bundles all the bits that might incorporate a whole application in a single deployment package. The same with a WAR or a JAR. A JAR may contain several EJBs (J2EE components). When you deploy the EJB JAR, it splits in run-time virtual space into n components, that are whole, self-contained and distinct from each other.

          Hope that makes sense. Otherwise, please explain further as to your purpose for this line of questioning as it may have been misconstrued.

          • 2. Re: Where is the JVM boundary?
            martin0

            Hi Jon,

            Thanks for the reply. The background is a JNDI problem I have, as per thread http://www.jboss.org/modules/bb/index.html?module=bb&op=viewtopic&t= error is is a NameNotFound Exception "PurchaseOrder not bound".

            I'm wondering if the issue to complicated by it being a local interface, but really I think not, because it's the lookup of the homeinterface that's failing - not the creation of the object from the home interface.

            I could really do with a simple example of a war with a client view jar in it's lib, using an ejb that is implemented in a separate jar - that's essentially what I'm trying to do.

            Thanks
            Martin

            • 3. Re: Where is the JVM boundary?
              darranl

              Have you had a look at what is bound in JNDI by using the JNDI view in the jmx console and executing the invoke method?

              • 4. Re: Where is the JVM boundary?
                jonlee

                Definitely have a look at the mapping technotes I mention in answer to another question you have in a different forum. The local component reference (java:comp/env/...) needs to map to an actual global JNDI name. And for JBoss, the local home interface has to have a specific global JNDI definition in its jboss.xml that is different and distinguishable from the global JNDI for its home interface.

                • 5. Re: Where is the JVM boundary?
                  martin0

                  Jon, I can't find the thread you are refering to :-( It's not in my watches.

                  Darranl, Thanks for the JNDIView tip. It yielded some interesting results!

                  Ejb Module: po-ejb.jar
                  java:comp namespace of the PurchaseOrderEJB bean:
                  +- env (class: org.jnp.interfaces.NamingContext)
                  | +- ejb (class: org.jnp.interfaces.NamingContext)
                  | | +- local (class: org.jnp.interfaces.NamingContext)
                  | | | +- CreditCard[link -> opc-com.sun.j2ee.blueprints.creditcard.ejb.CreditCardLocalHome] (class: javax.naming.LinkRef)
                  | | | +- ContactInfo[link -> opc-com.sun.j2ee.blueprints.contactinfo.ejb.ContactInfoLocalHome] (class: javax.naming.LinkRef)
                  | | | +- LineItem[link -> opc-com.sun.j2ee.blueprints.lineitem.ejb.LineItemLocalHome] (class: javax.naming.LinkRef)
                  | | | +- Address[link -> opc-com.sun.j2ee.blueprints.address.ejb.AddressLocalHome] (class: javax.naming.LinkRef)

                  java:comp namespace of the ContactInfoEJB bean:
                  +- env (class: org.jnp.interfaces.NamingContext)
                  | +- ejb (class: org.jnp.interfaces.NamingContext)
                  | | +- local (class: org.jnp.interfaces.NamingContext)
                  | | | +- Address[link -> opc-com.sun.j2ee.blueprints.address.ejb.AddressLocalHome] (class: javax.naming.LinkRef)

                  java:comp namespace of the AddressEJB bean:
                  +- env (class: org.jnp.interfaces.NamingContext)

                  java:comp namespace of the CreditCardEJB bean:
                  +- env (class: org.jnp.interfaces.NamingContext)

                  java:comp namespace of the LineItemEJB bean:
                  +- env (class: org.jnp.interfaces.NamingContext)



                  namespace of PurchaseOrderEJB doesn't contain PurchaseOrderLocalHome!!! Yet the jar contains the purchase order classes, and the deployment descriptors look okay to me (included as they won't attach)

                  jboss.xml:
                  <?xml version="1.0" encoding="UTF-8"?>
                  <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd">


                  <enterprise-beans>

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <local-jndi-name>com.sun.j2ee.blueprints.purchaseorder.ejb.PurchaseOrderLocalHome</local-jndi-name>



                  <ejb-name>AddressEJB</ejb-name>
                  <local-jndi-name>opc-com.sun.j2ee.blueprints.address.ejb.AddressLocalHome</local-jndi-name>



                  <ejb-name>CreditCardEJB</ejb-name>
                  <local-jndi-name>opc-com.sun.j2ee.blueprints.creditcard.ejb.CreditCardLocalHome</local-jndi-name>



                  <ejb-name>ContactInfoEJB</ejb-name>
                  <local-jndi-name>opc-com.sun.j2ee.blueprints.contactinfo.ejb.ContactInfoLocalHome</local-jndi-name>



                  <ejb-name>LineItemEJB</ejb-name>
                  <local-jndi-name>opc-com.sun.j2ee.blueprints.lineitem.ejb.LineItemLocalHome</local-jndi-name>


                  </enterprise-beans>




                  ejb-jar.xml
                  <?xml version="1.0" encoding="US-ASCII"?>

                  <!--
                  Copyright 2002 Sun Microsystems, Inc. All rights reserved.

                  Redistribution and use in source and binary forms, with or without
                  modification, are permitted provided that the following conditions
                  are met:

                  - Redistributions of source code must retain the above copyright
                  notice, this list of conditions and the following disclaimer.

                  - Redistribution in binary form must reproduce the above copyright
                  notice, this list of conditions and the following disclaimer in
                  the documentation and/or other materials provided with the
                  distribution.

                  Neither the name of Sun Microsystems, Inc. or the names of
                  contributors may be used to endorse or promote products derived
                  from this software without specific prior written permission.

                  This software is provided "AS IS," without a warranty of any
                  kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
                  WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
                  FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
                  EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
                  SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
                  DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
                  OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
                  FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
                  PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
                  LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
                  EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

                  You acknowledge that Software is not designed, licensed or intended
                  for use in the design, construction, operation or maintenance of
                  any nuclear facility.
                  -->


                  <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

                  <ejb-jar id="ejb-jar_ID">
                  PO
                  <display-name>PurchaseOrderJAR</display-name>
                  <enterprise-beans>

                  PurchaseOrder CMP EJB
                  <display-name>PurchaseOrderEB</display-name>
                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <local-home>com.sun.j2ee.blueprints.purchaseorder.ejb.PurchaseOrderLocalHome</local-home>
                  com.sun.j2ee.blueprints.purchaseorder.ejb.PurchaseOrderLocal
                  <ejb-class>com.sun.j2ee.blueprints.purchaseorder.ejb.PurchaseOrderEJB</ejb-class>
                  <persistence-type>Container</persistence-type>
                  <prim-key-class>java.lang.String</prim-key-class>
                  False
                  <cmp-version>2.x</cmp-version>
                  <abstract-schema-name>PurchaseOrder</abstract-schema-name>
                  <cmp-field>
                  <field-name>poId</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>poUserId</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>poEmailId</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>poDate</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>poLocale</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>poValue</field-name>
                  </cmp-field>
                  <primkey-field>poId</primkey-field>
                  <ejb-local-ref id="EJBLocalRef_1">
                  <ejb-ref-name>ejb/local/ContactInfo</ejb-ref-name>
                  <ejb-ref-type>Entity</ejb-ref-type>
                  <!-- CALLISTA CHANGE. WebSphere Technology for Developers "server visibility" problem. -->
                  <local-home>com.sun.j2ee.blueprints.contactinfo.ejb.OpcContactInfoLocalHome</local-home>
                  com.sun.j2ee.blueprints.contactinfo.ejb.ContactInfoLocal
                  <ejb-link>ContactInfoEJB</ejb-link>
                  </ejb-local-ref>
                  <ejb-local-ref id="EJBLocalRef_2">
                  <ejb-ref-name>ejb/local/Address</ejb-ref-name>
                  <ejb-ref-type>Entity</ejb-ref-type>
                  <!-- CALLISTA CHANGE. WebSphere Technology for Developers "server visibility" problem. -->
                  <local-home>com.sun.j2ee.blueprints.address.ejb.OpcAddressLocalHome</local-home>
                  com.sun.j2ee.blueprints.address.ejb.AddressLocal
                  <ejb-link>AddressEJB</ejb-link>
                  </ejb-local-ref>
                  <ejb-local-ref id="EJBLocalRef_3">
                  <ejb-ref-name>ejb/local/CreditCard</ejb-ref-name>
                  <ejb-ref-type>Entity</ejb-ref-type>
                  <!-- CALLISTA CHANGE. WebSphere Technology for Developers "server visibility" problem. -->
                  <local-home>com.sun.j2ee.blueprints.creditcard.ejb.OpcCreditCardLocalHome</local-home>
                  com.sun.j2ee.blueprints.creditcard.ejb.CreditCardLocal
                  <ejb-link>CreditCardEJB</ejb-link>
                  </ejb-local-ref>
                  <ejb-local-ref id="EJBLocalRef_4">
                  <ejb-ref-name>ejb/local/LineItem</ejb-ref-name>
                  <ejb-ref-type>Entity</ejb-ref-type>
                  <!-- CALLISTA CHANGE. WebSphere Technology for Developers "server visibility" problem. -->
                  <local-home>com.sun.j2ee.blueprints.lineitem.ejb.OpcLineItemLocalHome</local-home>
                  com.sun.j2ee.blueprints.lineitem.ejb.LineItemLocal
                  <ejb-link>LineItemEJB</ejb-link>
                  </ejb-local-ref>
                  <security-identity>

                  <use-caller-identity id="UseCallerIdentity_1"></use-caller-identity>
                  </security-identity>


                  <query-method id="QueryMethod_1">
                  <method-name>findPOBetweenDates</method-name>
                  <method-params>
                  <method-param>long</method-param>
                  <method-param>long</method-param>
                  </method-params>
                  </query-method>
                  <ejb-ql>SELECT OBJECT(a) From PurchaseOrder a WHERE a.poDate BETWEEN ?1 AND ?2</ejb-ql>



                  <display-name>ContactInfoEB</display-name>
                  <ejb-name>ContactInfoEJB</ejb-name>
                  <!-- CALLISTA CHANGE. WebSphere Technology for Developers "server visibility" problem. Prefixed the home-i/f, local-i/f and the ejb-class with "Opc" -->
                  <local-home>com.sun.j2ee.blueprints.contactinfo.ejb.OpcContactInfoLocalHome</local-home>
                  com.sun.j2ee.blueprints.contactinfo.ejb.ContactInfoLocal
                  <ejb-class>com.sun.j2ee.blueprints.contactinfo.ejb.OpcContactInfoEJB</ejb-class>
                  <persistence-type>Container</persistence-type>
                  <prim-key-class>java.lang.Object</prim-key-class>
                  False
                  <cmp-version>2.x</cmp-version>
                  <abstract-schema-name>ContactInfo</abstract-schema-name>
                  <cmp-field>
                  <field-name>telephone</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>familyName</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>email</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>givenName</field-name>
                  </cmp-field>
                  <ejb-local-ref id="EJBLocalRef_5">
                  <ejb-ref-name>ejb/local/Address</ejb-ref-name>
                  <ejb-ref-type>Entity</ejb-ref-type>
                  <local-home>com.sun.j2ee.blueprints.address.ejb.OpcAddressLocalHome</local-home>
                  com.sun.j2ee.blueprints.address.ejb.AddressLocal
                  <ejb-link>AddressEJB</ejb-link>
                  </ejb-local-ref>
                  <security-identity>

                  <use-caller-identity id="UseCallerIdentity_2"></use-caller-identity>
                  </security-identity>


                  <display-name>AddressEB</display-name>
                  <ejb-name>AddressEJB</ejb-name>
                  <!-- CALLISTA CHANGE. WebSphere Technology for Developers "server visibility" problem. Prefixed the home-i/f, local-i/f and the ejb-class with "Opc" -->
                  <local-home>com.sun.j2ee.blueprints.address.ejb.OpcAddressLocalHome</local-home>
                  com.sun.j2ee.blueprints.address.ejb.AddressLocal
                  <ejb-class>com.sun.j2ee.blueprints.address.ejb.OpcAddressEJB</ejb-class>
                  <persistence-type>Container</persistence-type>
                  <prim-key-class>java.lang.Object</prim-key-class>
                  False
                  <cmp-version>2.x</cmp-version>
                  <abstract-schema-name>Address</abstract-schema-name>
                  <cmp-field>
                  <field-name>zipCode</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>streetName2</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>state</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>streetName1</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>city</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>country</field-name>
                  </cmp-field>
                  <security-identity>

                  <use-caller-identity id="UseCallerIdentity_3"></use-caller-identity>
                  </security-identity>


                  <display-name>CreditCardEB</display-name>
                  <ejb-name>CreditCardEJB</ejb-name>
                  <!-- CALLISTA CHANGE. WebSphere Technology for Developers "server visibility" problem. Prefixed the home-i/f, local-i/f and the ejb-class with "Opc" -->
                  <local-home>com.sun.j2ee.blueprints.creditcard.ejb.OpcCreditCardLocalHome</local-home>
                  com.sun.j2ee.blueprints.creditcard.ejb.CreditCardLocal
                  <ejb-class>com.sun.j2ee.blueprints.creditcard.ejb.OpcCreditCardEJB</ejb-class>
                  <persistence-type>Container</persistence-type>
                  <prim-key-class>java.lang.Object</prim-key-class>
                  False
                  <cmp-version>2.x</cmp-version>
                  <abstract-schema-name>CreditCard</abstract-schema-name>
                  <cmp-field>
                  <field-name>expiryDate</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>cardType</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>cardNumber</field-name>
                  </cmp-field>
                  <security-identity>

                  <use-caller-identity id="UseCallerIdentity_4"></use-caller-identity>
                  </security-identity>


                  LineItem CMP EJB
                  <display-name>LineItemEB</display-name>
                  <ejb-name>LineItemEJB</ejb-name>
                  <!-- CALLISTA CHANGE. WebSphere Technology for Developers "server visibility" problem. Prefixed the home-i/f, local-i/f and the ejb-class with "Opc" -->
                  <local-home>com.sun.j2ee.blueprints.lineitem.ejb.OpcLineItemLocalHome</local-home>
                  com.sun.j2ee.blueprints.lineitem.ejb.LineItemLocal
                  <ejb-class>com.sun.j2ee.blueprints.lineitem.ejb.OpcLineItemEJB</ejb-class>
                  <persistence-type>Container</persistence-type>
                  <prim-key-class>java.lang.Object</prim-key-class>
                  False
                  <cmp-version>2.x</cmp-version>
                  <abstract-schema-name>LineItem</abstract-schema-name>
                  <cmp-field>
                  <field-name>categoryId</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>productId</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>itemId</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>lineNumber</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>quantity</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>unitPrice</field-name>
                  </cmp-field>
                  <cmp-field>
                  <field-name>quantityShipped</field-name>
                  </cmp-field>
                  <security-identity>

                  <use-caller-identity id="UseCallerIdentity_5"></use-caller-identity>
                  </security-identity>

                  </enterprise-beans>

                  <ejb-relation id="EJBRelation_1">
                  <ejb-relation-name>PurchaseOrder-ContactInfo</ejb-relation-name>
                  <ejb-relationship-role id="EJBRelationshipRole_1">
                  <ejb-relationship-role-name>purchaseorder-has-contactinfo</ejb-relationship-role-name>
                  One
                  <relationship-role-source id="RoleSource_1">
                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  </relationship-role-source>
                  <cmr-field id="CMRField_1">
                  <cmr-field-name>contactInfo</cmr-field-name>
                  </cmr-field>
                  </ejb-relationship-role>
                  <ejb-relationship-role id="EJBRelationshipRole_2">
                  <ejb-relationship-role-name>contactinfo-for-purchaseorder</ejb-relationship-role-name>
                  One
                  <cascade-delete></cascade-delete>
                  <relationship-role-source id="RoleSource_2">
                  <ejb-name>ContactInfoEJB</ejb-name>
                  </relationship-role-source>
                  </ejb-relationship-role>
                  </ejb-relation>
                  <ejb-relation id="EJBRelation_2">
                  <!-- CALLISTA CHANGE. Added a name for the relation, it was empty -->
                  <ejb-relation-name>ContactInfo-Address</ejb-relation-name>
                  <ejb-relationship-role id="EJBRelationshipRole_3">
                  <ejb-relationship-role-name>ContactInfoEJB</ejb-relationship-role-name>
                  One
                  <relationship-role-source id="RoleSource_3">
                  <ejb-name>ContactInfoEJB</ejb-name>
                  </relationship-role-source>
                  <cmr-field id="CMRField_2">
                  <cmr-field-name>address</cmr-field-name>
                  </cmr-field>
                  </ejb-relationship-role>
                  <ejb-relationship-role id="EJBRelationshipRole_4">
                  <ejb-relationship-role-name>AddressEJB</ejb-relationship-role-name>
                  One
                  <cascade-delete></cascade-delete>
                  <relationship-role-source id="RoleSource_4">
                  <ejb-name>AddressEJB</ejb-name>
                  </relationship-role-source>
                  </ejb-relationship-role>
                  </ejb-relation>
                  <ejb-relation id="EJBRelation_3">
                  <ejb-relation-name>PurchaseOrder-Card</ejb-relation-name>
                  <ejb-relationship-role id="EJBRelationshipRole_5">
                  <ejb-relationship-role-name>purchaseorder-has-card</ejb-relationship-role-name>
                  One
                  <relationship-role-source id="RoleSource_5">
                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  </relationship-role-source>
                  <cmr-field id="CMRField_3">
                  <cmr-field-name>creditCard</cmr-field-name>
                  </cmr-field>
                  </ejb-relationship-role>
                  <ejb-relationship-role id="EJBRelationshipRole_6">
                  <ejb-relationship-role-name>card-for-purchaseorder</ejb-relationship-role-name>
                  One
                  <cascade-delete></cascade-delete>
                  <relationship-role-source id="RoleSource_6">
                  <ejb-name>CreditCardEJB</ejb-name>
                  </relationship-role-source>
                  </ejb-relationship-role>
                  </ejb-relation>
                  <ejb-relation id="EJBRelation_4">
                  <ejb-relation-name>PurchaseOrder-LineItem</ejb-relation-name>
                  <ejb-relationship-role id="EJBRelationshipRole_7">
                  <ejb-relationship-role-name>purchaseorder-has-lineitems</ejb-relationship-role-name>
                  One
                  <relationship-role-source id="RoleSource_7">
                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  </relationship-role-source>
                  <cmr-field id="CMRField_4">
                  <cmr-field-name>lineItems</cmr-field-name>
                  <cmr-field-type>java.util.Collection</cmr-field-type>
                  </cmr-field>
                  </ejb-relationship-role>
                  <ejb-relationship-role id="EJBRelationshipRole_8">
                  <ejb-relationship-role-name>lineItem-for-purchaseorder</ejb-relationship-role-name>
                  Many
                  <cascade-delete></cascade-delete>
                  <relationship-role-source id="RoleSource_8">
                  <ejb-name>LineItemEJB</ejb-name>
                  </relationship-role-source>
                  </ejb-relationship-role>
                  </ejb-relation>

                  <assembly-descriptor id="AssemblyDescriptor_ID">
                  <method-permission id="MethodPermission_1">


                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-name>*</method-name>

                  </method-permission>
                  <method-permission id="MethodPermission_2">


                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-name>*</method-name>

                  </method-permission>
                  <method-permission id="MethodPermission_3">


                  <ejb-name>AddressEJB</ejb-name>
                  <method-name>*</method-name>

                  </method-permission>
                  <method-permission id="MethodPermission_4">


                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-name>*</method-name>

                  </method-permission>
                  <method-permission id="MethodPermission_5">


                  <ejb-name>LineItemEJB</ejb-name>
                  <method-name>*</method-name>

                  </method-permission>
                  <container-transaction id="MethodTransaction_1">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getPoId</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_2">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getPoUserId</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_3">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getPoEmailId</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_4">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getPoDate</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_5">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getPoLocale</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_6">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getPoValue</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_7">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getContactInfo</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_8">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setContactInfo</method-name>
                  <method-params>
                  <method-param>com.sun.j2ee.blueprints.contactinfo.ejb.ContactInfoLocal</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_9">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getCreditCard</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_10">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setCreditCard</method-name>
                  <method-params>
                  <method-param>com.sun.j2ee.blueprints.creditcard.ejb.CreditCardLocal</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_11">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getLineItems</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_12">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>addLineItem</method-name>
                  <method-params>
                  <method-param>com.sun.j2ee.blueprints.lineitem.ejb.LineItemLocal</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_13">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getAllItems</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_14">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getData</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_15">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>create</method-name>
                  <method-params>
                  <method-param>com.sun.j2ee.blueprints.purchaseorder.ejb.PurchaseOrder</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_16">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>findByPrimaryKey</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_17">

                  <ejb-name>PurchaseOrderEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>findPOBetweenDates</method-name>
                  <method-params>
                  <method-param>long</method-param>
                  <method-param>long</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_18">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>remove</method-name>
                  <method-params>
                  <method-param>java.lang.Object</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_19">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getTelephone</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_20">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setFamilyName</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_21">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getFamilyName</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_22">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setEmail</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_23">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>findByPrimaryKey</method-name>
                  <method-params>
                  <method-param>java.lang.Object</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_24">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setTelephone</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_25">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getGivenName</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_26">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getEmail</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_27">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setAddress</method-name>
                  <method-params>
                  <method-param>com.sun.j2ee.blueprints.address.ejb.AddressLocal</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_28">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>remove</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_29">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getAddress</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_30">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setGivenName</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_31">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getData</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_32">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>create</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.String</method-param>
                  <method-param>com.sun.j2ee.blueprints.address.ejb.AddressLocal</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_33">

                  <ejb-name>ContactInfoEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>create</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_34">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getCountry</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_35">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setStreetName2</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_36">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setStreetName1</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_37">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getZipCode</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_38">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setState</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_39">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getCity</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_40">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>remove</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_41">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setZipCode</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_42">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getStreetName2</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_43">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getStreetName1</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_44">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setCountry</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_45">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getState</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_46">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setCity</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_47">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getData</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_48">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>create</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_49">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>create</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_50">

                  <ejb-name>AddressEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>findByPrimaryKey</method-name>
                  <method-params>
                  <method-param>java.lang.Object</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_51">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>remove</method-name>
                  <method-params>
                  <method-param>java.lang.Object</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_52">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getExpiryDate</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_53">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getExpiryMonth</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_54">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getExpiryYear</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_55">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setExpiryDate</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_56">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getData</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_57">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>findByPrimaryKey</method-name>
                  <method-params>
                  <method-param>java.lang.Object</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_58">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>create</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_59">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setCardType</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_60">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>remove</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_61">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>create</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_62">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getCardNumber</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_63">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setCardNumber</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_64">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getCardType</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_65">

                  <ejb-name>CreditCardEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getData</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_66">

                  <ejb-name>LineItemEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getCategoryId</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_67">

                  <ejb-name>LineItemEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getProductId</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_68">

                  <ejb-name>LineItemEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getItemId</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_69">

                  <ejb-name>LineItemEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getLineNumber</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_70">

                  <ejb-name>LineItemEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getQuantity</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_71">

                  <ejb-name>LineItemEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getUnitPrice</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_72">

                  <ejb-name>LineItemEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getQuantityShipped</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_73">

                  <ejb-name>LineItemEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>setQuantityShipped</method-name>
                  <method-params>
                  <method-param>int</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_74">

                  <ejb-name>LineItemEJB</ejb-name>
                  <method-intf>Local</method-intf>
                  <method-name>getData</method-name>
                  <method-params>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_75">

                  <ejb-name>LineItemEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>create</method-name>
                  <method-params>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.String</method-param>
                  <method-param>int</method-param>
                  <method-param>float</method-param>
                  <method-param>int</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_76">

                  <ejb-name>LineItemEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>create</method-name>
                  <method-params>
                  <method-param>com.sun.j2ee.blueprints.lineitem.ejb.LineItem</method-param>
                  <method-param>int</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  <container-transaction id="MethodTransaction_77">

                  <ejb-name>LineItemEJB</ejb-name>
                  <method-intf>LocalHome</method-intf>
                  <method-name>findByPrimaryKey</method-name>
                  <method-params>
                  <method-param>java.lang.Object</method-param>
                  </method-params>

                  <trans-attribute>Required</trans-attribute>
                  </container-transaction>
                  </assembly-descriptor>
                  </ejb-jar>

                  • 6. Re: Where is the JVM boundary?
                    jonlee

                    Look at http://www.amitysolutions.com.au/documents/JBossJNDI-technote.pdf for a quick explanation on how referencing should work. This excludes the use of the ejb-link directive which only works under certain conditions.

                    • 7. Re: Where is the JVM boundary?
                      martin0

                      Deployment of po-ejb.jar yields these results:
                      23:07:09,703 INFO [MainDeployer] Starting deployment of package: file:/C:/jboss-3.2.2/server/petstore/deploy/po-ejb.jar
                      23:07:11,145 INFO [EjbModule] Deploying PurchaseOrderEJB
                      23:07:11,526 INFO [EjbModule] Deploying ContactInfoEJB
                      23:07:11,556 INFO [EjbModule] Deploying AddressEJB
                      23:07:11,586 INFO [EjbModule] Deploying CreditCardEJB
                      23:07:11,606 INFO [EjbModule] Deploying LineItemEJB
                      23:07:15,351 INFO [EntityInstancePool] Started jboss.j2ee:jndiName=com.sun.j2ee.blueprints.purchaseorder.ejb.PurchaseOrderLocalHome,plugin=pool,service=EJB
                      23:07:15,351 INFO [EntityContainer] Started jboss.j2ee:jndiName=com.sun.j2ee.blueprints.purchaseorder.ejb.PurchaseOrderLocalHome,service=EJB
                      23:07:15,411 INFO [EntityInstancePool] Started jboss.j2ee:jndiName=opc-com.sun.j2ee.blueprints.contactinfo.ejb.ContactInfoLocalHome,plugin=pool,service=EJB
                      23:07:15,421 INFO [EntityContainer] Started jboss.j2ee:jndiName=opc-com.sun.j2ee.blueprints.contactinfo.ejb.ContactInfoLocalHome,service=EJB
                      23:07:15,481 INFO [EntityInstancePool] Started jboss.j2ee:jndiName=opc-com.sun.j2ee.blueprints.address.ejb.AddressLocalHome,plugin=pool,service=EJB
                      23:07:15,481 INFO [EntityContainer] Started jboss.j2ee:jndiName=opc-com.sun.j2ee.blueprints.address.ejb.AddressLocalHome,service=EJB
                      23:07:15,511 INFO [EntityInstancePool] Started jboss.j2ee:jndiName=opc-com.sun.j2ee.blueprints.creditcard.ejb.CreditCardLocalHome,plugin=pool,service=EJB
                      23:07:15,521 INFO [EntityContainer] Started jboss.j2ee:jndiName=opc-com.sun.j2ee.blueprints.creditcard.ejb.CreditCardLocalHome,service=EJB
                      23:07:19,627 INFO [LineItemEJB] Table 'opc_lineitem' already exists
                      23:07:19,738 INFO [ContactInfoEJB] Table 'opc_contactinfo' already exists
                      23:07:19,838 INFO [PurchaseOrderEJB] Table 'opc_purchaseorder' already exists
                      23:07:20,148 INFO [AddressEJB] Table 'opc_address' already exists
                      23:07:20,228 INFO [CreditCardEJB] Table 'opc_creditcard' already exists
                      23:07:20,228 INFO [EntityInstancePool] Started jboss.j2ee:jndiName=opc-com.sun.j2ee.blueprints.lineitem.ejb.LineItemLocalHome,plugin=pool,service=EJB
                      23:07:20,228 INFO [EntityContainer] Started jboss.j2ee:jndiName=opc-com.sun.j2ee.blueprints.lineitem.ejb.LineItemLocalHome,service=EJB
                      23:07:20,228 INFO [EjbModule] Started jboss.j2ee:module=po-ejb.jar,service=EjbModule
                      23:07:20,228 INFO [EJBDeployer] Deployed: file:/C:/jboss-3.2.2/server/petstore/deploy/po-ejb.jar

                      • 8. Re: Where is the JVM boundary?
                        jonlee

                        Your local JNDI names - com.sun.j2ee.blueprints.purchaseorder.ejb.PurchaseOrderLocalHome - are not probably correct. That is the FQN for the local home interface. It is not really a JNDI name. That makes things difficult for anything not using the ejb-link tag to reference any of your EJBs - e.g. looking for ejb/PurchaseOrder when your JNDI name is com.sun.j2ee.blueprints.purchaseorder.ejb.PurchaseOrderLocalHome.

                        The deployment warnings just indicate that the tables already existed when your entity beans attempted to create the tables to store data representing the instances. You would need to determine if this is reasonable for your Petstore application. It is only a warning.

                        • 9. Re: Where is the JVM boundary?
                          martin0

                          Hi Jon,

                          I understand what you mean in that I was confused by the FQN being used in the jndi-name field, but this is Sun's work, not mine.

                          As far as I can tell/see ejb-link tags *are* being used in the deployment descriptors.

                          I'm slightly apprehensive at changing the whole style of jndi lookups used in petstore. I was hoping to work with it rather than do something different.


                          FYI petstore is using the "service locator" pattern - I think it's called.
                          Also it has JNDINames classes scattered around, eg

                          package com.sun.j2ee.blueprints.purchaseorder.ejb;


                          /**
                          * This class is the central location to store the internal
                          * JNDI names of various entities. Any change here should
                          * also be reflected in the deployment descriptors.
                          */
                          public class JNDINames {

                          // JNDI names of contact info, addressm lineitem and PO EJBs
                          public static final String CINFO_EJB =
                          "java:comp/env/ejb/local/ContactInfo";
                          public static final String CARD_EJB = "java:comp/env/ejb/local/CreditCard";
                          public static final String LI_EJB = "java:comp/env/ejb/local/LineItem";
                          }

                          Can you advise me any further?

                          Much appreciated!
                          Martin

                          • 10. Re: Where is the JVM boundary?
                            jonlee

                            Your servlets are packaged in a WAR so you need to create web.xml and jboss-web.xml entries that map these java:/comp/env entries to the defined global JNDI names. See the technote.

                            The link element only works with elements packaged in the same JAR.

                            • 11. Re: Where is the JVM boundary?
                              martin0

                              Hi Jon,

                              I can't find the technote to which you are refering - can you give me the url?

                              I'm revisting some basics, as I think I'm trying to run before I can walk....

                              There appears to me to be an inconsistency between different jndi name uses regarding their relative location in the jndi namespace:
                              1) the ejb-ref-name element in an ejb-ref in ejb-jar.xml is relative to java:comp/env
                              2) the ejb name used by default, or the jndi-name specified in jboss.xml seems to be relative to java:comp/env/ejb

                              Thanks
                              Martin

                              • 12. Re: Where is the JVM boundary?
                                jonlee

                                It was in my second reply. http://www.amitysolutions.com.au/documents/JBossJNDI-technote.pdf. The mapping is very simple and you just want to look at the servlet container related section, rather than EJB-to-EJB calls. But it probably wouldn't hurt to look at the general theory.