Vous êtes sur la page 1sur 7

Home: www.vipan.

com

Vipan Singla

e-mail: vipan@vipan.com

A Generic ejb-jar.xml File


Standard EJB Deployment Descriptor per EJB Spec 1.1
Access the full DTD at http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd which is
very nicely written. All of the tags (elements) are fully described in alphabetical
order. Example usage is provided.
A minimal ejb-jar.xml file looks like this:

<?xml version="1.0"?>

<!DOCTYPE ejb-jar PUBLIC


'-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN'
'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'>

<ejb-jar>
<enterprise-beans>

<!-- A minimal session EJB deployment -->


<session>
<ejb-name>PostingEJB</ejb-name>
<home>ejbs.PostingHome</home>
<remote>ejbs.Posting</remote>
<ejb-class>ejbs.PostingBean</ejb-class>
<!-- or Stateless -->
<session-type>Stateful</session-type>
<transaction-type>Container</transaction-type>
</session>

<!-- A minimal CMP entity EJB deployment -->


<entity>
<ejb-name>Bid</ejb-name>
<home>ejbe.BidHome</home>
<remote>ejbe.Bid</remote>
<ejb-class>ejbe.BidBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>ejbe.BidPK</prim-key-class>
<reentrant>False</reentrant>
<cmp-field><field-name>bid</field-name></cmp-field>
<cmp-field><field-name>bidder</field-name></cmp-field>
<cmp-field><field-name>bidDate</field-name></cmp-field>
<cmp-field><field-name>id</field-name></cmp-field>
</entity>
<!-- A minimal BMP entity EJB deployment -->
<entity>
<ejb-name>BidBMP</ejb-name>
<home>com.bea.EJBE.solutions.BidBMPHome</home>
<remote>com.bea.EJBE.solutions.BidBMP</remote>

<ejb-class>com.bea.EJBE.solutions.BidBMPBean</ejb-class>
<persistence-type>Bean</persistence-type>
<prim-key-class>pkg.BidBMPPK</prim-key-class>
<reentrant>False</reentrant>
</entity>

</enterprise-beans>
<assembly-descriptor></assembly-descriptor>
</ejb-jar>

Here is the generic version of an ejb-jar.xml, suitably commented to show


example placement and usage of (almost) all tags in the DTD. It is based on
Chaper 16 (Deployment Descriptor) of the EJB Spec 1.1. The PDF version of
the spec. is available fromhttp://java.sun.com/products/ejb/docs.html.

<?xml version="1.0"?>

<!DOCTYPE ejb-jar PUBLIC


"-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN"
"http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">

<ejb-jar>

<description>
EJBs for ... application.
</description>

<enterprise-beans>
<!-- One one or more "session" or "entity" tags -->

<session>
<!-- No relation to the EJB's JNDI name -->
<ejb-name>EmployeeService</ejb-name>

<home>com.wombat.empl.EmployeeServiceHome</home>
<remote>com.wombat.empl.EmployeeService</remote>
<ejb-class>com.wombat.empl.EmployeeServiceBean</ejb-class>
<!-- Stateful|Stateless -->
<session-type>Stateful</session-type>
<!-- Who manages transanction? Bean|Container -->
<transaction-type>Bean</transaction-type>

<!-- OPTIONAL:
env-entry*, ejb-ref*, security-role-ref*, resource-ref*
-->

<description>
Session between client and server
</description>

<!-- OPTIONAL -->


<env-entry>
<!-- Access in code using JNDI lookup("java:/comp/env/envvar1") -->
<env-entry-name>envvar1</env-entry-name>
<!--

java.lang.Boolean|String|Integer|Double|Byte|Short|Long|Float
-->
<env-entry-type>String</env-entry-type>
<!-- OPTIONAL -->
<env-entry-value>some value</env-entry-value>
<description>This env entry is for ... </description>
</env-entry>

<!-- OPTIONAL, refer to another EJB's home -->


<ejb-ref>
<!-- Fake ref-name to refer to it in this document,
"ejb/" prefix is recommended -->
<ejb-ref-name>ejb/EmplRecords</ejb-ref-name>
<!-- Entity|Session -->
<ejb-ref-type>Entity</ejb-ref-type>
<home>com.wombat.empl.EmployeeRecordHome</home>
<remote>com.wombat.empl.EmployeeRecord</remote>
<!-- OPTIONAL, link to an EJB name in a JAR file -->
<ejb-link>EmployeeRecord</ejb-link>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/PensionPlan</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.wombat.empl.PensionPlanHome</home>
<remote>com.wombat.empl.PensionPlan</remote>
</ejb-ref>

<!-- OPTIONAL, Refer to an EXTERNAL resource -->


<resource-ref>
<!-- JNDI name -->
<res-ref-name>jdbc/EmployeeAppDB</res-ref-name>
<!-- Object type expected back from JNDI lookup -->
<res-type>javax.sql.DataSource</res-type>
<!-- Application|Container authorized,
(whether you code sign-on in EJB, or
the deployer describes the sign-on in XML -->
<res-auth>Container</res-auth>
<!-- OPTIONAL -->
<description>
Reference to a JDBC database EmployeeService
</description>
</resource-ref>
</session>

<session>
<description>
Session used by the applications administrator
</description>

<ejb-name>EmployeeServiceAdmin</ejb-name>
<home>com.wombat.empl.EmployeeServiceAdminHome</home>
<remote>com.wombat.empl.EmployeeServiceAdmin</remote>
<ejb-class>com.wombat.empl.EmployeeServiceAdmin-Bean</ejb-class>

<session-type>Stateful</session-type>
<transaction-type>Bean</transaction-type>
<resource-ref>
<description>
This is a reference to a JDBC database.
EmployeeService keeps a log of all
transactions performed through the
EmployeeService bean for auditing
purposes.
</description>
<res-ref-name>jdbc/EmployeeAppDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</session>

<entity>
<!-- cmp-field*, primkey-field?, env-entry*,
ejb-ref*, security-role-ref*, resource-ref* -->
<description>
Blah blah blah ...
</description>
<ejb-name>EmployeeRecord</ejb-name>

<home>com.wombat.empl.EmployeeRecordHome</home>
<remote>com.wombat.empl.EmployeeRecord</remote>
<ejb-class>com.wombat.empl.EmployeeRecordBean</ejb-class>
<!-- Bean|Container -->
<persistence-type>Container</persistence-type>
<!-- use java.lang.Object as a catch-all type,
but usually java.lang.String -->
<prim-key-class>com.wombat.empl.EmployeeID</prim-key-class>
<!-- OPTIONAL. For CMP and single-field primary keys only.
ONE of the cmp-fields.
-->
<!-<primkey-field>lastName</primkey-field>
-->
<!-- True|False -->
<reentrant>True</reentrant>

<!-- Only if CMP! -->


<cmp-field>
<!-- can be a superclass of the actual field -->
<field-name>employeeID</field-name>
</cmp-field>
<cmp-field><field-name>firstName</field-name></cmp-field>
<cmp-field><field-name>lastName</field-name></cmp-field>
<cmp-field><field-name>address1</field-name></cmp-field>
<cmp-field><field-name>address2</field-name></cmp-field>
<cmp-field><field-name>city</field-name></cmp-field>
<cmp-field><field-name>state</field-name></cmp-field>
<cmp-field><field-name>zip</field-name></cmp-field>
<cmp-field><field-name>homePhone</field-name></cmp-field>
<cmp-field><field-name>jobTitle</field-name></cmp-field>

<cmp-field><field-name>managerID</field-name></cmp-field>
<cmp-field><field-name>jobTitleHis-tory</field-name></cmp-field>
</entity>

<entity>
<description>
CMP to pauroll database
</description>
<ejb-name>AardvarkPayroll</ejb-name>

<home>com.aardvark.payroll.PayrollHome</home>
<remote>com.aardvark.payroll.Payroll</remote>
<ejb-class>com.aardvark.payroll.PayrollBean</ejb-class>

<persistence-type>Bean</persistence-type>
<prim-key-class>com.aardvark.payroll.Accoun-tID</prim-key-class>
<reentrant>False</reentrant>

<security-role-ref>
<role-name>payroll-org</role-name>
<role-link>payroll-department</role-link>
</security-role-ref>
</entity>
</enterprise-beans>

<!-- OPTIONAL -->


<assembly-descriptor>

<!-- OPTIONAL, can be many -->


<security-role>
<description>
Employee is allowed to ...
</description>
<role-name>employee</role-name>
</security-role>

<security-role>
<description>
HR is allowed to ...
</description>
<role-name>hr-department</role-name>
</security-role>

<security-role>
<description>
IT is allowed to ...
</description>
<role-name>admin</role-name>
</security-role>

<!-- OPTIONAL. Can be many -->


<method-permission>
<!-- Define role name in "security-role" -->
<!-- Must be one or more -->
<role-name>employee</role-name>
<!-- Must be one or more -->
<method>
<ejb-name>EmployeeService</ejb-name>
<!-- * = all methods -->
<method-name>*</method-name>
</method>
</method-permission>

<method-permission>

<role-name>employee</role-name>

<method>
<ejb-name>EmployeeRecord</ejb-name>
<!-- Optional,
to pick the correct method if in both "Home" and "Remote" -->
<method-intf>Remote</method-intf>
<!-- If no method-params, refers to all overloadeded methods -->
<method-name>getDetail</method-name>
<!-- Optional, used to pick among overloaded methods -->
<!-<method-params>
<method-param>java.lang.String</method-param>
<method-param>int[]</method-param>
<method-param>yourPkg.YourClass</method-param>
<method-params>
-->
</method>
<method>
<ejb-name>EmployeeRecord</ejb-name>
<method-name>updateDetail</method-name>
<!-- To specify no-argument method -->
<!-<method-param></method-param>
-->
</method>
<method>
<ejb-name>EmployeeRecord</ejb-name>
<method-name>findByPrimaryKey</method-name>
</method>
</method-permission>

<method-permission>

<role-name>employee</role-name>

<method>
<ejb-name>AardvarkPayroll</ejb-name>
<method-name>findByPrimaryKey</method-name>
</method>
<method>

<ejb-name>AardvarkPayroll</ejb-name>
<method-name>getEmployeeInfo</method-name>
</method>
<method>
<ejb-name>AardvarkPayroll</ejb-name>
<method-name>updateEmployeeInfo</method-name>
</method>
</method-permission>

<!-- OPTIONAL, can be many. How the container is to manage


transactions when calling anEJB's business methods -->
<container-transaction>
<!-- Can specify many methods at once here -->
<method>
<ejb-name>EmployeeRecord</ejb-name>
<method-name>*</method-name>
</method>
<!-- NotSupported|Supports|Required|RequiresNew|Mandatory|Never -->
<trans-attribute>Required</trans-attribute>
</container-transaction>

<container-transaction>
<method>
<ejb-name>AardvarkPayroll</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>

<!-- OPTIONAL, this file contains classes needed by clients.


Deployer to make it accessible to the client class-loader -->
<!-<ejb-client-jar>
this_ejb_client.jar
</ejb-client-jar>
-->

</ejb-jar>

2000 Vipan Singla

Vous aimerez peut-être aussi