The
client tier in an EJB system needs a
way to transfer bulk data with the server,
as the J2EE aplications implement server
side business component.Some methods
exposed by the business components return
data to the client. Often, the client
invokes a business object's get methods
multiple times until it obtains all
the attribute values.
If the client needs to display or update
a set of attributes that live on the
server, these attributes could live
in an entity bean or be accessible through
a session bean. The client could get
or update the data is by loading many
parameters into a method call, when
updating data on the server, or by making
multiple fine-grained calls to the server
to retrieve data. Every call between
the client and server is a remote method
call with substantial network overhead.
If the client application calls the
individual getter and setter methods
that require or update single attribute
values, it will require as many remote
calls as there are attributes. The individual
calls generate a lot of network traffic
and affects severely the system performance.
The solution to this problem is to use
a plain java classes called Value Objects
or Transfer Objects which encapsulate
the bulk business data. A single method
call is used to send and retrieve the
Transfer Object / Value Obects. When
the client requests the enterprise bean
for the business data, the enterprise
bean can construct the Transfer Object,
populate it with its attribute values,
and pass it by value to the client.
When an enterprise bean uses a Transfer
Object / Value Obects, the client makes
a single remote method invocation to
the enterprise bean to request the Transfer
Object / Value Obects instead of numerous
remote method calls to get individual
attribute values. The enterprise bean
then constructs a new Transfer Object
instance, copies values into the object
and returns it to the client. The client
receives the Transfer Object / Value
Obects and can then invoke accessor
or getter methods on the Transfer Object
to get the individual attribute values
from the Transfer Object. The implementation
of the Transfer Object / Value Obectsmay
be such that it makes all attributes
public. Because the Transfer Object
/ Value Obects is passed by value to
the client, all calls to the Transfer
Object / Value Obects instance are local
calls instead of remote method invocations.
A Transfer object / value object is
a plain serializable Java class that
represents a snapshot of some server
side data, as in the following code
example:
import
java.io.Serializable;
public class OneValueObject implements
Serializable { |
| |
private
int attribute1;
private String attribute2;
private String attribute3;
private long attribute4;
…
public int getAttribute1();
public String getAttribute2();
public String getAttribute3();
public long getAttribute4();
… |
| }//OneValueObject |
The
responsibilities of the three components
participating in this patterns are :
Client
This represents the client of the enterprise
bean. The client can be an end-user
application, like jsp, servlets or a
java applet, as in the case of a rich
client application that has been designed
to directly access the enterprise beans.
The client can be Business Delegates
or a different BusinessObject.
Business Object
The Business Object represents a role
in this pattern that can be fulfilled
by a session bean, an entity bean, or
a Data Access Object (DAO). The BusinessObject
is responsible for creating the Transfer
Object and returning it to the client
upon request. The Business Object may
also receive data from the client in
the form of a Transfer Object / Value
Obects and use that data to perform
an update.
Transfer Object /
Value Objects
The Transfer Object / Value Obects is
an arbitrary serializable Java object
referred to as a Transfer Object / Value
Obects. Transfer Object / Value Obects
has all the business values required
by the client. A Transfer Object / Value
Obects class may provide a constructor
that accepts all the required attributes
to create the Transfer Object / Value
Obects. The constructor may accept all
entity bean attribute values that the
Transfer Object / Value Obects is designed
to hold. Typically, the members in the
Transfer Object / Value Obects are defined
as public, thus eliminating the need
for get and set methods. If some protection
is necessary, then the members could
be defined as protected or private,
and methods are provided to get the
values. Transfer Objects / Value Obects
can be mutable or immutabel depending
on whether the application wants to
allow updates to the Transfer Objects
/ Value Obects
|