+ All Categories
Home > Documents > Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name...

Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name...

Date post: 19-Dec-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
61
Enterprise JavaBeans Layer:08 Persistence
Transcript
Page 1: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Enterprise JavaBeans

Layer:08

Persistence

Page 2: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 2

Agenda

• Discuss "finder" methods.• Describe DataSource resources.• Describe bean-managed persistence.• Describe container-managed persistence.

Page 3: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Finder Methods

Page 4: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 4

Purpose

• Entity beans are typically used to refer to existing data.

• In order to retrieve that data, we construct finder methods that are responsible for locating and retrieving that data using an appropriate select statement.

Page 5: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 5

Declarations

• Finder methods are declared by:– Providing a method find<method> in the

home interface.– Declare a corresponding ejbFind<method>

in the bean class.– As with all other methods with these

relationships, the arguments must match between the methods.

Page 6: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 6

Home interface

• Each finder method has the following declaration in the home interface:– A name typically called find<method>.– A return type of the remote interface of the

entity bean.– A throws clause including both FinderException and RemoteException.

Page 7: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 7

Bean Class

• Each finder method has the following definition in the bean class:– A name typically called ejbFind<method>.– A return type of the primary key type of the

bean or a return type of Collection or Enumeration.

– A throws clause including FinderException.

Page 8: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 8

Home Interface

1. public interface BookHomeextends EJBObject {

2. public Book findByPrimaryKey(BookKey key)throws FinderException, RemoteException;

3. public Collection findByAuthor(String name)throws RemoteException;

4. }

Page 9: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 9

Bean Class

1. public interface BookEJBimplements EntityBean {

2. public BookKeyejbFindByPrimaryKey(BookKey key)throws FinderException, RemoteException {

3. }

4. public CollectionejbFindByAuthor(String name)throws RemoteException {

5. }

6. }

Page 10: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 10

Single-Row Finders

Page 11: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 11

Finding(1 of 6)

• The client invokes the find<method> on the home interface.

Page 12: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 12

Finding(2 of 6)

• The home object delegates the call to the ejbFind<method> of an arbitrary bean instance in the free pool.

• The process does not activate the bean os make sure that the bean does whatever it needs to do in the method to prepare itself to access the database.

Page 13: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 13

Finding(3 of 6)

• The bean instance performs an appropriate select against the underlying backing store.

• The result of this select will be used to construct a primary key.

Page 14: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 14

Finding(4 of 6)

• The result of the select is used to construct a primary key object.

• This object is returned to the home object.

Page 15: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 15

Finding(5 of 6)

• The home object creates a new EJBObject and installs the key inside of it.

Page 16: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 16

Finding(6 of 6)

• The home object return the EJBObject to the client.

• The client can now use that EJBObject to perform business processing.

Page 17: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 17

Multi-Row Finders

Page 18: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 18

Finding(1 of 6)

• The client invokes the find<method> on the home interface.

Page 19: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 19

Finding(2 of 6)

• The home object delegates the call to the ejbFind<method> of an arbitrary bean instance in the free pool.

• The process does not activate the bean os make sure that the bean does whatever it needs to do in the method to prepare itself to access the database.

Page 20: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 20

Finding(3 of 6)

• The bean instance performs an appropriate select against the underlying backing store.

• The result of this select will be used to construct a Collection or Enumeration of primary keys.

Page 21: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 21

Finding(4 of 6)

• The result of the select is used to construct a Collection or Enumeration of primary key objects.

• This Collection or Enumeration is returned to the home object.

Page 22: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 22

Finding(5 of 6)

• For each key within the Collection or Enumeration, the home object creates a new EJBObject and installs the key inside of it.

• This new EJBObject is then placed into a new Collection or Enumeration.

Page 23: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 23

Finding(6 of 6)

• The home object returns the Collectionor Enumeration of EJBObjects to the client.

• The client can now use those EJBObjects to perform business processing.

Page 24: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Bean-Managed Persistence

Page 25: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 25

Purpose

• In bean-managed persistence (BMP) the developer writes all of the code needed to access the database and perform SQL queries.

• This results in more code to maintain, but tighter control over what that code does.

Page 26: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 26

Methods

• For a bean to provide BMP it must provide the queries for each of the following methods:– ejbCreate()

– ejbFind<method>

– ejbLoad()

– ejbRemove()

– ejbStore()

Page 27: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 27

DataSource(1 of 3)

• Under EJB 1.1, the only mechanism by which a bean may use JDBC to access a database is through a DataSource.

• A DataSource is similar to a Driverexcept that it provides more functionality:– connection pooling– distributed transactions

Page 28: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 28

DataSource(2 of 3)

• DataSource references are defined to the server in a server-specific way.

• This is sometimes part of deployment, but is more often part of the server configuration.– For instance, in JBoss we need to add

information to the jboss.jcml configuration file.• Our beans will use JNDI to locate this

resource factory.

Page 29: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 29

DataSource(3 of 3)

• The DataSource is an interface within the javax.sql package.

Page 30: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 30

Locating the DataSource(1 of 2)

• The first step to using the DataSource is to use JNDI to locate its definition within the naming service.

• Once we've got the DataSourcereference we can use it to create Connection references.

• We can then use the Connection to issue queries against the database.

Page 31: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 31

Locating the DataSource(2 of 2)

• Since the DataSource can be accessed and used throughout the life of the entity bean, it is reasonable to place the code for accessing the DataSource within the setEntityContext() method.

Page 32: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 32

setEntityContext(1 of 2)

1. public voidsetEntityContext(EntityContext ctx) {

2. this.context = context;

3. try {

4. // TODO: configure the properties

5. }

6. catch (Exception e) {

7. throw new EJBException( e.getMessage() );

8. }

Page 33: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 33

setEntityContext(2 of 2)

9. try {

10. this.dataSource =(DataSource)initialContext.lookup( dsName );

11. }

12. catch (Exception e) {

13. throw new EJBException( e.getMessage() );

14. }

15. }

Page 34: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 34

ejbCreate(1 of 4)

1. public IntegerejbCreate(int id, String name,

int age, boolean available)throws CreateException {

2. try {

3. // TODO: configure the bean's internal4. // data. if any problems occurred

5. // with the validations, throw a

6. // CreateException.

7. }

8. catch (Exception e) {9. throw new CreateException(e.getMessage());

10. }

Page 35: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 35

ejbCreate(2 of 4)

11. Connection conn = null;

12. PreparedStatement stmt = null;

13. try {

14. conn = dataSource.getConnection();

15. stmt = conn.prepareStatement(EJB_CREATE);

16. // TODO: set the appropriate parameters

17. stmt.executeUpdate();

18. }

Page 36: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 36

ejbCreate(3 of 4)

19. catch (Exception e) {

20. throw new EJBException( e.getMessage() );

21. }

22. finally {

23. try {

24. // TODO: close the statement and

25. // connection.

26. }

27. catch (SQLException sqle) {

28. }

29. }

Page 37: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 37

ejbCreate(4 of 4)

32. return new Integer( id );

33. }

Page 38: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 38

ejbFindByPrimaryKey(1 of 3)

1. public IntegerejbFindByPrimaryKey(Integer id)throws FinderException {

2. Connection conn = null;3. PreparedStatement stmt = null;

4. ResultSet rs = null;

5. try {

6. conn = dataSource.getConnection();7. stmt = conn.

prepareStatement( EJB_FIND_BY_PK );8. stmt.setInt( 1, id.intValue() );

9. rs = stmt.executeQuery();

Page 39: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 39

ejbFindByPrimaryKey(2 of 3)

10. if ( rs.next() ) {

11. return id;

12. }

13. throw new ObjectNotFoundException();

14. }

15. catch (Exception e) {

16. throw new EJBException( e.getMessage() );

17. }

18. finally {

Page 40: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 40

ejbFindByPrimaryKey(3 of 3)

19. try {

20. // TODO: close the resultset, statement

21. // and connection references.

22. }

23. catch (SQLException sqle) {

24. }

25. }

26. }

Page 41: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 41

ejbLoad

1. public void ejbLoad() {

2. Connection conn = null;

3. PreparedStatement stmt = null;

4. ResultSet rs = null;

5. // TODO: use the database to load the

6. // bean's internal state. use the

7. // same techniques described in

8. // ejbCreate() and

9. // ejbFindByPrimaryKey()

10. }

Page 42: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 42

ejbRemove

1. public void ejbRemove() {

2. Connection conn = null;

3. PreparedStatement stmt = null;

4. // TODO: write the query to issue a

5. // delete against the database.

6. }

Page 43: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 43

ejbStore

1. public void ejbStore() {

2. Connection conn = null;

3. PreparedStatement stmt = null;

4. // TODO: write the query to issue an

5. // update against the database.

6. }

Page 44: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Container-Managed Persistence

Page 45: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 45

Structure

• In container-managed persistence, the bean developer ceases to manage the database.

• Instead, the container generates a Data Access Object to interact with the database on behalf of the EJB.

• The cost of a container is often proportional to its CMP capabilities.

Page 46: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 46

Bean Responsibilities(1 of 4)

• When using CMP the following rules need to be followed by the bean developer:

– The ejbCreate() method's job is to set the values of the bean fields. The container will retrieve these fields during the insert.

– The ejbCreate() methods must return null. It's the responsibility of the container to generate the primary key.

Page 47: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 47

Bean Responsibilities(2 of 4)

• When using CMP the following rules need to be followed by the bean developer:

– The fields of the bean class must be public. It's the responsibility of the container to read and write their values.

– The fields of the primary key must be public. It's the container's responsibility to read and write these fields.

Page 48: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 48

Bean Responsibilities(3 of 4)

• When using CMP the following rules need to be followed by the bean developer:

– The ejbLoad() is called as a notification that the data has been read from the database.

– The ejbStore() is called as a notification that the data is about to be saved to the database.

Page 49: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 49

Bean Responsibilities(4 of 4)

• When using CMP the following rules need to be followed by the bean developer:

– The ejbRemove() method can be empty. The container will take care of removing the data from the database.

Page 50: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Deployment

Page 51: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 51

Entity Beans

• Like session beans, an entity bean's structure and key properties are recorded in its deployment descriptor.

• In addition to many of the properties required by session beans, entity beans also have information about their primary keys and any container-managed fields.

Page 52: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 52

ejb-jar.xml

1. <entity>

2. <display-name>RiderEJB</display-name>

3. <ejb-name>RiderEJB</ejb-name>

4. <home>server.RiderHome</home>

5. <remote>server.Rider</remote>

6. <ejb-class>server.RiderBean</ejb-class>

7. <persistence-type>Bean</persistence-type>

8. <prim-key-class>java.lang.Integer

</prim-key-class>

9. </entity>

Page 53: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 53

Container-Managed Persistence

• Container-managed persistence is reflected in the deployment descriptor.

• The persistence-type tag will be given a value of Container.

• For each field to be persisted, there will be a cmp-field tag.

Page 54: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 54

ejb-jar.xml(1 of 2)

1. <entity>

2. <display-name>RiderEJB</display-name>

3. <ejb-name>RiderEJB</ejb-name>

4. <home>server.RiderHome</home>

5. <remote>server.Rider</remote>6. <ejb-class>server.RiderBean</ejb-class>

7. <persistence-type>Container

</persistence-type>8. <prim-key-class>

java.lang.Integer</prim-key-class>

9. <primkey-field>riderID</primkey-field>

Page 55: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 55

ejb-jar.xml(2 of 2)

10. <cmp-field>

11. <field-name>riderId</field-name>

12. </cmp-field>

13. <cmp-field>

14. <field-name>riderName</field-name>

15. </cmp-field>

16. <primkey-field>riderId</primkey-field>

Page 56: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 56

Resource Factories

• Resource factories such as DataSourcereferences are defined to the server, but reference using JNDI.

• The bean uses an internal name to refer to the actual JNDI name.

• This is called a resource reference.

Page 57: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 57

ejb-jar.xml

1. <resource-ref>

2. <res-ref-name>jdbc/se554</res-ref-name>

3. <res-type>javax.sql.DataSource</res-type>

4. <res-auth>Container</res-auth>

5. </resource-ref>

Page 58: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 58

EJB References

• Sometimes one bean needs to refer to another.– One J2EE pattern, Session Façade, is built

around this precept.• To allow the bean to reference one another,

we need to declare an EJB reference within a bean's namespace.

Page 59: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 59

ejb-jar.xml

1. <ejb-ref>

2. <ejb-ref-name>ejb/horse</ejb-ref-name>

3. <ejb-ref-type>Entity</ejb-ref-type>

4. <home>server.HorseHome</home>

5. <remote>server.Horse</remote>

6. <ejb-link>HorseEJB</ejb-link>

7. </ejb-ref>

Page 60: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 60

Summary

• Discuss "finder" methods.• Describe DataSource resources.• Describe bean-managed persistence.• Describe container-managed persistence.• Describe how resource and EJB references

are recorded in the deployment descriptor.

Page 61: Enterprise JavaBeansEach finder method has the following definition in the bean class: – A name typically called ejbFind. – A return type of the primary key type

Last Revised: 11/1/2001 Copyright (C) 2001 61

Next Steps

• Make reading assignment.• Layer:08 homework will be available on the

course website.


Recommended