31
Enterprise JavaBeans Enterprise JavaBeans 2.0 2.0 Wu Lu (Cont’d)

Enterprise JavaBeans 2.0

  • Upload
    gyala

  • View
    25

  • Download
    0

Embed Size (px)

DESCRIPTION

Enterprise JavaBeans 2.0. Wu Lu. (Cont’d). EJB2.0 Query Language. EJB QL is a declarative language similar in many respects to SQL Is intended to be portable to all EJB2.0-compliant containers and persistence managers. The Usage of Find Method in EJB1.1. - PowerPoint PPT Presentation

Citation preview

Page 1: Enterprise JavaBeans 2.0

Enterprise JavaBeans 2.0Enterprise JavaBeans 2.0

Wu Lu

(Cont’d)

Page 2: Enterprise JavaBeans 2.0

EJB2.0 Query LanguageEJB2.0 Query Language

EJB QL is a declarative language similar in many respects to SQL

Is intended to be portable to all EJB2.0-compliant containers and persistence managers.

Page 3: Enterprise JavaBeans 2.0

The Usage of Find Method in EJB1.1The Usage of Find Method in EJB1.1

Declare find method in home interface Modify the xml file: C:\orion\application-deployments\factory\ejbs\orion-ejb-jar.xml <finder-method query=“”> <finder-method query=“$status LIKE ‘o%’”>

Advange of Query Language (QL) : Developed and tested once, Use anywhere

Page 4: Enterprise JavaBeans 2.0

Methods which use QLMethods which use QL

Finder Methods

Select Methods1. They are not exposed to clients. They are used in the

implementation class alone.

2. They allow the programmer to retrieve dependent objects, values, or related EJBs based on relevant search criteria.

Page 5: Enterprise JavaBeans 2.0

Advantages of using a select methodAdvantages of using a select method

A select method written in QL can be more efficient than java programming.

Declarative SQL language is more maintainable and less error prone

Page 6: Enterprise JavaBeans 2.0

Types of Select MethodTypes of Select Method ejbSelect<METHOD> ---Operate on all instances of that entity ---Can return individual instances or collections of any type

represented by a cmp-field , as well as remote interfaces represented by a cmr-field.

ejbSelect<METHOD>InEntity ---Associated with a particular entity identity. ---Can not be used from the implementations of a home-interface

business method. ---Introduced as a way of efficiently navigating the EJBs relationships

with other entity beans and with its dependent objects

**METHOD represents a descriptive name for the activity of the method.

Page 7: Enterprise JavaBeans 2.0

Where to specify a QueryWhere to specify a Query

A query is specified in two parts:

Method declaration

Specify the QL in XML deployment descriptor

Page 8: Enterprise JavaBeans 2.0

Find Method:

Declared in the home interface, just as it is for EJB1.1 cmp Returning the remote interface type Must have a name of the form findByXXX Throw RemoteException and FinderException

Method declaration(1)Method declaration(1)

Page 9: Enterprise JavaBeans 2.0

Method declaration(2)Method declaration(2)

Public abstract class SportTeamEJB implements EntityBean

{

abstract public String ejbSelectShipToCityInEntity()

throws FinderExecption;

}

Select Method:

1.Declared as abstract in the bean’s main implementation class. 2. Must have a name of the form ejbSelect<METHOD>() or ejbSelect<METHOD>InEntity()3. Throw javax.ejb.FinderException4. Return type can be individual instances or collections of any type of cmp-field and cmr-field5. The collection class must be either java.util.Collection or java.util.Set

Page 10: Enterprise JavaBeans 2.0

Specify query languageSpecify query language 1. Specify in the XML deployment descriptor2. A query is defined as a <query> element as a child of the relevant <entity> element.3. A query has 3 parts: ---an optional description ---a method it applied ---the query language string <query>

<query-method>

<method-name>ejbSelectOverdueLibraryBooksInEntity<method-name>

<method-params/>

<query-method>

<ejb-ql> SELECT b FROM b in books WHERE overdue is TRUE</ejb-ql>

<query>

Page 11: Enterprise JavaBeans 2.0

How to specify a queryHow to specify a query

An EJB QL string may have up to 3 clauses:

1. Select : indicate the return type of the query or of the instances in

a returned collection.

2. From: declare variables that represent navigation paths in your

schema ( correlation variables). These variables are used

in SELECT or WHERE clauses.

3. Where: a conditional expression that limits the results of your

query. It can include parameters from the finder or select

method.

Page 12: Enterprise JavaBeans 2.0

The concept of schemaThe concept of schema

Is the definition of its cmp-fields and cmr-fields

A schema type has a name. Entity bean: the name is specified in the deployment descriptor with

the element <abstract-schema-name> Dependent object: same as the dependent object name

Page 13: Enterprise JavaBeans 2.0

The concept of schemaThe concept of schema

Every query in an entity bean must use that bean’s schema, or the schema of a related objects in the same ejb-jar, for navigation.

A bean’s schema is different from its remote interface.

Can not refer to a schema of an entity or dependent object that is defined outside your ejb-jar. You may call finder methods on entities outside your JAR, but you may not navigate to their dependent objects or refer to their state.

Page 14: Enterprise JavaBeans 2.0

OrderBean

Number

custname

lineitems

Order_date

Shippine_address

Billing_address

Address ( dependent object )

street

city

state

Postal_code

Lineitem ( dependent object )

product

quantity

shipped

ProductBean

name

description

type

Page 15: Enterprise JavaBeans 2.0

Navigation Operator “.”Navigation Operator “.”

Use navigation operator “.” to traverse cmp-and cmr-fields.

SELECT shipping_address.city

String ejbSelectShipToCityInEntity() throws FinderException Java.util.Collection ejbSelectShipToCity() throws FinderException Java.util.Set ejbSelectShipToCity() throws FinderException

SELECT shipping_address WHERE shipping_address.state=‘NY’

WHERE billing_address.state=‘MA’

Page 16: Enterprise JavaBeans 2.0

Navigating Over CollectionsNavigating Over Collections

Can not use navigation operator to navigate into a many-valued relationship.

SELECT lineitems.product.name WHERE lineitems.shipped=TRUE

Declare a correlation variable in the From clause

SELECT 1.product.name FROM 1 in lineitems WHERE 1.shipped=TRUE

Page 17: Enterprise JavaBeans 2.0

Input ParametersInput Parameters

To parameterize a query:

1. Add the appropriate parameters to the method declaration. 2. Refer to those parameters in the WHERE clause with a question

mark , followed by a index of the parameter in the method declaration. 3. Date literals need to be expressed as a standard Java long

milliseconds value.

OrderEJB findByCustomerName(String custname) throws FinderException

WHERE custname=?1

Page 18: Enterprise JavaBeans 2.0

Other Entity BeansOther Entity Beans

Query references to entity beans that are within the same ejb-jar and use the EJB2.0 persistence model represent a schema.

SELECT 1.product.name FROM 1in lineitems WHERE 1.shipped= TRUE

Query references to entity beans that are outside the eib-jar or use the EJB1.1 persistence model represent the remote interface of the entity bean.

SELECT 1.product FROM 1in lineitems WHERE 1.shipped= TRUE

The remote interface navigation operation => SELECT 1=>product FROM 1 in lineitems WHERE 1.shipped=true

Page 19: Enterprise JavaBeans 2.0

Where Clause OptionsWhere Clause Options

Logical operator: NOT, AND,OR

Comparison operator:=,>,>=,<,<=,<> Types: number, string, boolean, object Comparison for entity bean remote references or schemas are done by

compare their primary key values. Comparison for dependent objects are also probably done by compare

their primary key values.

Arithmetic operators: +, -, *, /

BETWEEN expression: [NOT] BETWEEN x AND y

Page 20: Enterprise JavaBeans 2.0

IN expression: [NOT] IN (string, …) Entity-reference [NOT] IN (finder-expression)

LIKE expression: [NOT] LIKE pattern [ESCAPE character]

_: representing any single character %:representing any sequence of zero or more characters

NULL test: IS [NOT] NULL

Page 21: Enterprise JavaBeans 2.0

Queries from the Manufacturing Queries from the Manufacturing ApplicationApplication

(1) Location: application-server specific file (2) Format: application-server specific format

<finder-method query=“$status LIKE ‘o%’”> <method>

<ejb-name>Orders</ejb-name> <method-name>findOpenOrders</method-name> <method-params></method-params> </method> </finder-method>

<finder-method query=“$status NOT LIKE‘c%’ AND $status NOT LIKE ‘f%’”>

<method> <ejb-name>Orders</ejb-name> <method-name>findUncompletedOrders</method-name> <method-params></method-params> </method> </finder-method>

Page 22: Enterprise JavaBeans 2.0

(1)Location: deployment descriptor (2)Format: in a standard format(EJB QL)

<query> <query-method> <method-name> findOpenOrders</method-name> <method-params/> <query-method> <ejb-ql> WHERE status LIKE ‘o%’</ejb-ql> <query>

<query> <query-method> <method-name> findUncompletedOrders</method-name> <method-params/> <query-method> <ejb-ql> WHERE status NOT LIKE ‘c%’ AND status NOT LIKE

‘f%’</ejb-ql> <query>

Page 23: Enterprise JavaBeans 2.0

Message-Driven BeansMessage-Driven Beans

Advantages that messaging can provide:

1. Messaging can provide reliable, asynchronous delivery of information from the client to server.

2. Messaging can be a simple way to provide interoperability with other enterprise components.

3. Messaging can be used to implement a public-subscribe architecture. A message-driven bean can be a component that listens for messages on a particular topic.

Page 24: Enterprise JavaBeans 2.0

MDB Vs Other types of EJBMDB Vs Other types of EJB

Similar to a stateless session bean in terms of the role it will play in architecture.

It is an entry point into your business logic from a client. Can call methods on stateless session EJBs and on entity

EJBs. Updates to resources such as a database can be made in the

same transaction as message acknowledgement. If the transaction is rolled-back, the message would not be

acknowledged and it will be redelivered.

Page 25: Enterprise JavaBeans 2.0

MDB Vs Other types of EJBMDB Vs Other types of EJB

Difference: It has neither a home nor a remote interface.

Instead, its public interface consists of a single onMessage() method called by the EJB container when messages arrive. The onMessage() method has a single argument: the message that is being delivered.

Exception handling is different. The onMessage() method does not throw any checked and unchecked

exception. If a run time exception is thrown away, the event is logged, the instance of the bean is discarded, and any existing transaction is rolled back.

Page 26: Enterprise JavaBeans 2.0

Message-driven beans do not have a client security context

because that information is not propagated with a message.

Message-driven beans can execute in the context of a transaction.

The transaction can be bean- or container-managed. As there is no way to propagate an existing transactional context, a

contained-managed transaction must be newly created.

EJB container handles message acknowledgement. The bean developer should not use the JMS API for message

acknowledgement.

Page 27: Enterprise JavaBeans 2.0

Lifecycle MethodsLifecycle Methods

A message-driven bean must implement the javax.ejb.MessageDrivenBean interface

setMessageDrivenContext(MessageDrivenContext mdc) It’s similar to the EntityContext or SessionContext.

ejbCreate()

ejbRemove()

A message-driven bean instance is single-threaded. A container may instantiate multiple instances of message-driven beans to process message concurrently

Page 28: Enterprise JavaBeans 2.0

MDB and JMSMDB and JMS

A message-driven bean is associated with a single JMS topic or queue. The deployer associates the bean with a particular topic or queue when the bean is deployed in the enterprise’s environment.

It’s better to associate ONE message-driven bean with ONE JMS topic or queue.

See chap28 for more details

Page 29: Enterprise JavaBeans 2.0

Package mypackage

Import javax.ejb.*; Import javax.jms.*;

Public void onMessage(Message msg) { //your business logic } Public void setMessageDrivenContext(MessageDrivenContext

mdc) { this.mdc=mdc; } Public void ejbCreate() { // often empty } Public void ejbRemove(){ // often empty }

Page 30: Enterprise JavaBeans 2.0

EJB 2.0 compliant persistence manager EJB 2.0 compliant persistence manager platform--platform--ePersistJ™ 2.0ePersistJ™ 2.0

Release at 03/12/2001

EJB-QL support for portable select and selectInEntity methods

Complete support for one-to-one, one-to-many and many-to-many relations among entity.

Page 31: Enterprise JavaBeans 2.0

Questions ?