1 / 31

Enterprise JavaBeans 2.0

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.

gyala
Download Presentation

Enterprise JavaBeans 2.0

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Enterprise JavaBeans 2.0 • Wu Lu (Cont’d)

  2. 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.

  3. The 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

  4. Methods which use QL • Finder Methods • Select Methods • They are not exposed to clients. They are used in the implementation class alone. • They allow the programmer to retrieve dependent objects, values, or related EJBs based on relevant search criteria.

  5. Advantages 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

  6. Types 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.

  7. Where to specify a Query • A query is specified in two parts: • Method declaration • Specify the QL in XML deployment descriptor

  8. Method declaration(1) • 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

  9. Method declaration(2) 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.FinderException 4. Return type can be individual instances or collections of any type of cmp-field and cmr-field 5. The collection class must be either java.util.Collection or java.util.Set Public abstract class SportTeamEJB implements EntityBean { abstract public String ejbSelectShipToCityInEntity() throws FinderExecption; }

  10. Specify query language • Specify in the XML deployment descriptor • A query is defined as a <query> element as a child of the • relevant <entity> element. • 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>

  11. How 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.

  12. The 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

  13. The 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.

  14. 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’

  15. Navigating 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

  16. Input 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

  17. Other 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

  18. Where 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

  19. 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

  20. Queries from the Manufacturing Application • (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>

  21. (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>

  22. Message-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.

  23. MDB 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.

  24. MDB 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.

  25. 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.

  26. Lifecycle 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

  27. MDB 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

  28. 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 • }

  29. EJB 2.0 compliant persistence manager platform--ePersistJ™ 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.

  30. Questions ?

More Related