Deploying Enterprise JavaBean With Oracle9iAS

6
Oracle8i JVM Deployin g Enter prise JavaBeans to Oracle9i Application Server Release 8.1.7 February 2001 Part No. A88705-01 In th is release, Enter pr ise J avaBeans (EJ B) 1.1 are fully sup po rted . There a re some chan ges to th e Oracle speci c dep loyment d escriptor for EJ Bs that allow EJBs to function properly in both the Oracle9 i App lic ation Server mid dle tier and in the 8.1.7 dat abase. This document discusses the following topics: s Denin g Or acle-Speci c El emen ts for T ran sactions s Dening Container-Managed Persistence s Chan ges in th e Oracle-S p eci c DTD Dening Oracle-Specic Elements for Transactions There are three elements th at you can further sp eci fy for you r global transaction. s Dene wh ether the local resource is automat ically enli sted in th e transaction. s Dene a two-pha se comm it engine. s Dene wh ether branches are enabled in the global transacti on. The following show s the elements n ecessary for these elements, which are contained w ithin th e <transaction-manager> element in the Oracle- speci c d eploymen t descriptor. <mappings> ... <transaction-manager> <jndi-name>/test/TransactionManager</jndi-name> <default-enlist>TRUE</default-enlist> <create-branches>FALSE</create-branches> </transaction-manager> </mappings> Oracle is a registered trademark, and the Oracle Logo, Oracle9 i Application Server, Oracle8 i , and Oracle8i JVM are trademarks or registered trademarks of Oracle Corporation. Other names may be trademarks of their respective owners. Copyright © 2001, Oracle Corporation. All Rights Reserved.

Transcript of Deploying Enterprise JavaBean With Oracle9iAS

Page 1: Deploying Enterprise JavaBean With Oracle9iAS

8/3/2019 Deploying Enterprise JavaBean With Oracle9iAS

http://slidepdf.com/reader/full/deploying-enterprise-javabean-with-oracle9ias 1/6

Oracle8i  JVM

Deploying Enterprise JavaBeans to Oracle9i  Application Server

Release 8.1.7

February 2001

Part No. A88705-01

In th is release, Enterpr ise JavaBeans (EJB) 1.1 are fully sup ported . There a re

some changes to the Oracle specific dep loyment d escriptor for EJBs that

allow EJBs to function properly in both the Oracle9i App lication Server

middle tier and in the 8.1.7 database.

This document d iscusses the following topics:

s Defining Oracle-Specific Elemen ts for Tran sactions

s Defining Container-Managed Persistence

s Chan ges in the Oracle-Specific DTD

Defining Oracle-Specific Elements for Transactions

There are three elements th at you can further sp ecify for your global

transaction.

s Define wh ether the local resource is automat ically enlisted in th e

transaction.

s Define a two-phase comm it engine.

s Define whether branches are enabled in the global transaction.

The following show s the elements n ecessary for these elements, which are

contained w ithin th e <transaction-manager> element in the

Oracle-specific d eployment descriptor.

<mappings>

...

<transaction-manager>

<jndi-name>/test/TransactionManager</jndi-name>

<default-enlist>TRUE</default-enlist>

<create-branches>FALSE</create-branches>

</transaction-manager>

</mappings>

Oracle is a registered trademark, and the Oracle Logo, Oracle9i Application Server, Oracle8

i , and Oracle8

i JVM are

trademarks or registered trademarks of Oracle Corporation. Other names may be trademarks of their respective owners.

Copyright© 2001, Oracle Corporation.

All Rights Reserved.

Page 2: Deploying Enterprise JavaBean With Oracle9iAS

8/3/2019 Deploying Enterprise JavaBean With Oracle9iAS

http://slidepdf.com/reader/full/deploying-enterprise-javabean-with-oracle9ias 2/6

2

Defining Local Resource Enlistment for Transactions

The local resource can be a d atabase or an Oracle9i App lication Server

mid dle-tier cache. If your EJBs are runn ing in the Oracle 8.1.7 database and

you w ant th e local datasou rce to participate in a global transaction, you

mu st specify <default-enlist> to be true.

<mappings>

...

<transaction-manager>

...

<default-enlist>TRUE</default-enlist>

</transaction-manager>

</mappings>

If you r EJBs are runn ing in the Oracle9i App lication Server middle tier, you

do n ot want the Oracle9i App lication Server cache to be enlisted w ith the

transaction man ager because the Oracle9i App lication Server Database

Cache is read -only. Since the d efault for this element is FALSE, you don’t

need to put the <default-enlist> tag in the deployment descriptor.

<mappings>

...

<transaction-manager>...

</transaction-manager>

</mappings>

Defining Two-Phase Commit Engine

If you are u sing two-phase comm it for your global transaction, you must

provide the UserTransaction object’s JNDI nam e to th e

<transaction-manager> element within the Oracle-specific deployment

descriptor. The following exam ple specifies the UserTransaction object

/test/myUTFor2pc:

<mappings>

...

<transaction-manager>

<jndi-name>/test/myUTFor2pc</jndi-name>

...</transaction-manager>

</mappings>

Enabling Branches Within the Transaction

According to the X/ Open XA protocol, if you w ant to apply two or more

up da tes to a single da tabase, the transaction manager monitors each

update-known as a unit-of-work-through branches. The

<create-branches> element d efines whether more than one u nit of 

Page 3: Deploying Enterprise JavaBean With Oracle9iAS

8/3/2019 Deploying Enterprise JavaBean With Oracle9iAS

http://slidepdf.com/reader/full/deploying-enterprise-javabean-with-oracle9ias 3/6

3

work can be performed on a single database. That is, if several separate

up da tes are to be app lied to a single database, this element mu st be set to

true. If false, only a single unit of work is allowed per d atabase with in the

global transaction.

You can specify tha t bran ches are allowed within the global transaction byspecifying the <create-branches> element to TRUE, as follows:

<mappings>

...

<transaction-manager>

...

<create-branches>TRUE</create-branches>

</transaction-manager>

</mappings>

Enabling bran ches is only supp orted w hen the global transaction uses

s mu ltiple d atabases

s mu ltiple sessions accessing a single d atabase

Branching w ithin a single transaction and session to the same database is

not supported.

Accessing a single database from m ultiple sessions, branches will be used .

How ever, this will result in a tw o-phase commit.

Defining Container-Managed Persistence

If you h ave chosen to use the container managed persistence entity bean,

you can optionally provide a <persistence-datasource> where the

persistent attribu tes should be accessed. If the

<persistence-datasource> is not defined in the deployment

descriptor, the EJB container uses the kprb driver to access the local

da tabase for the persistence attributes.

The following d efines a persistence provid er that u ses a remote d atabase to

store the persistence fields. The /test/empDatabase JTA DataSource is

defined in the following example as the remote persistence storage. This

DataSource was bound by bindds with the -type jta option.

<persistence-provider>

<description>specifies a type of persistence manager</description>

<persistence-name>

psi-ri

</persistence-name>

<persistence-deployer>

oracle.aurora.ejb.persistence.ocmp.OcmpEntityDeployer

</persistence-deployer>

Page 4: Deploying Enterprise JavaBean With Oracle9iAS

8/3/2019 Deploying Enterprise JavaBean With Oracle9iAS

http://slidepdf.com/reader/full/deploying-enterprise-javabean-with-oracle9ias 4/6

4

<persistence-datasource>

/test/empDatabase

</persistence-datasource>

</persistence-provider>

Changes in the Oracle-Specific DTD

The comp lete oracle specific DTD is listed below. Note that th is includ es

the optional tags wh ich were described above.

<!-- This is the XML DTD for the Oracle Specific EJB deployment descriptor -->

<!ELEMENT oracle-descriptor (mappings*, run-as*, persistence-provider*,

persistence-descriptor*)>

<!ELEMENT run-as (description?, mode, security-role*, method)>

<!ELEMENT method (description?, ejb-name, method-intf?, method-name,

method-params?)>

<!ELEMENT method-params (method-param*)>

<!ELEMENT method-intf (#PCDATA)>

<!ELEMENT method-name (#PCDATA)>

<!ELEMENT method-param (#PCDATA)>

<!ELEMENT mappings (ejb-mapping*, security-role-mapping*, resource-ref-mapping*,

transaction-manager*)>

<!ELEMENT transaction-manager (description?, jndi-name?, default-enlist?,

create-branches?)><!ELEMENT ejb-mapping (ejb-name, jndi-name)>

<!ELEMENT security-role-mapping (security-role, oracle-role)>

<!ELEMENT resource-ref-mapping (res-ref-name, jndi-name)>

<!ELEMENT ejb-name (#PCDATA)>

<!ELEMENT jndi-name (#PCDATA)>

<!ELEMENT default-enlist (#PCDATA)>

<!ELEMENT create-branches (#PCDATA)>

<!ELEMENT security-role (description?, role-name)>

<!ELEMENT role-name (#PCDATA)>

<!ELEMENT oracle-role (#PCDATA)>

<!ELEMENT ejb-ref-name (#PCDATA)>

<!ELEMENT res-ref-name (#PCDATA)>

<!--

mode = SYSTEM_IDENTITY, SPECIFIED_IDENTITY, CLIENT_IDENTITY

if mode is SPECIFIED_IDENTITY, security-role must be specified

if mode is SYSTEM_IDENTITY or CLIENT_IDENTITY and security-role is

specified, security-role is ignored

-->

<!ELEMENT mode (#PCDATA)>

<!--- persistence-provider describes the container managed persistence -->

<!ELEMENT persistence-provider (description?, persistence-name,

persistence-deployer, persistence-datasource?)>

<!ELEMENT description (#PCDATA)>

<!ELEMENT persistence-name (#PCDATA)>

<!ELEMENT persistence-deployer (#PCDATA)>

<!ELEMENT persistence-datasource (#PCDATA)>

<!ELEMENT persistence-descriptor (description?, ejb-name, persistence-name,

persistence-param*, psi-ri*)>

Page 5: Deploying Enterprise JavaBean With Oracle9iAS

8/3/2019 Deploying Enterprise JavaBean With Oracle9iAS

http://slidepdf.com/reader/full/deploying-enterprise-javabean-with-oracle9ias 5/6

5

<!ELEMENT persistence-param (#PCDATA)>

<!ELEMENT psi-ri (schema, table, attr-mapping+, serialize-mapping?)>

<!ELEMENT schema (#PCDATA)>

<!ELEMENT table (#PCDATA)>

<!ELEMENT attr-mapping (field-name, column-name)>

<!ELEMENT serialize-mapping (field-name+, column-name)>

<!ELEMENT field-name (#PCDATA)>

<!ELEMENT column-name (#PCDATA)>

Global Transactions in the Oracle9i Application Server Environment

In a normal global transaction, you open connections to each database that

you w ant included in th e global transaction. After the tran saction

completes, the transaction m anager comm its all changes to all databases

involved in the transaction.However, with Oracle9i Application Server, the Oracle Database Cache may

incorrectly be treated by the tran saction manager as one of the databases in

the global transaction. The EJB tha t is active in th e mid dle-tier retrieves a

connection to both the Oracle Database Cache and to the back-end Oracle

da tabase. However, the EJB can only upd ate the back-end d atabase. The

transaction manager must not treat the Cache as another database involved

in the transaction or it will perform a two-phase comm it when th e

transaction end s. The tw o-phase commit p rocess is expensive and

un necessary. Only the back-end da tabase should be enlisted in th e global

transaction; thu s, prom pting the transaction man ager to perform a

single-ph ase commit, wh ich is inexpensive.

To ensure tha t the Cache is not treated as an enlisted d atabase in the global

transaction, do th e following:

1. Ensure that the <default-enlist> element in the Oracle-specific

deployment descriptor is either not set -- so that it defaults to FALSE --

or is set to FALSE.

2. Bind the DataSource for the da tabase Cache with an y non-JTA type.

Only a JTA DataSource object can be au tomatically enlisted in a

global transaction.

Page 6: Deploying Enterprise JavaBean With Oracle9iAS

8/3/2019 Deploying Enterprise JavaBean With Oracle9iAS

http://slidepdf.com/reader/full/deploying-enterprise-javabean-with-oracle9ias 6/6

6