|
|
EJB Interview
|
Q: |
What are the methods
of Entity Bean?What is the difference between Container-Managed Persistent (CMP)
bean and Bean-Managed Persistent(BMP) ? |
|
A: |
Container-managed
persistence beans are the simplest for the bean developer to create and the
most difficult for the EJB server to support. This is because all the logic
for synchronizing the bean's state with the database is handled
automatically by the container. This means that the bean developer doesn't
need to write any data access logic, while the EJB server is supposed to
take care of all the persistence needs automatically. With CMP, the
container manages the persistence of the entity bean. A CMP bean developer
doesn't need to worry about JDBC code and transactions, because the
Container performs database calls and transaction management instead of the
programmer. Vendor tools are used to map the entity fields to the database
and absolutely no database access code is written in the bean class. All
table mapping is specified in the deployment descriptor. Otherwise, a BMP
bean developer takes the load of linking an application and a database on
his shoulders.
The bean-managed persistence (BMP) enterprise bean manages synchronizing its
state with the database as directed by the container. The bean uses a
database API to read and write its fields to the database, but the container
tells it when to do each synchronization operation and manages the
transactions for the bean automatically. Bean-managed persistence gives the
bean developer the flexibility to perform persistence operations that are
too complicated for the container or to use a data source that is not
supported by the container.BMP beans are not 100% database-independent,
because they may contain database-specific code, but CMP beans are unable to
perform complicated DML (data manipulation language) statements. EJB 2.0
specification introduced some new ways of querying database (by using the
EJB QL - query language). |
|
Q: |
What are the callback methods in Entity beans? |
|
A: |
The bean class defines create methods that match methods in the home
interface and business methods that match methods in the remote interface.
The bean class also implements a set of callback methods that allow the
container to notify the bean of events in its life cycle. The callback
methods are defined in the
javax.ejb.EntityBean
interface that is implemented by all entity beans.The
EntityBean interface has the following definition. Notice that the bean
class implements these methods.
|
public interface
javax.ejb.EntityBean { |
|
|
public void
setEntityContext();
public void
unsetEntityContext();
public void ejbLoad();
public void ejbStore();
public void ejbActivate();
public void ejbPassivate();
public void ejbRemove(); |
|
} |
|
The
setEntityContext() method provides the bean with an
interface to the container called the EntityContext. The EntityContext
interface contains methods for obtaining information about the context under
which the bean is operating at any particular moment. The EntityContext
interface is used to access security information about the caller; to
determine the status of the current transaction or to force a transaction
rollback; or to get a reference to the bean itself, its home, or its primary
key. The EntityContext is set only once in the life of an entity bean
instance, so its reference should be put into one of the bean instance's
fields if it will be needed later.
The
unsetEntityContext() method is used at the end of the bean's
life cycle before the instance is evicted from memory to dereference the
EntityContext and perform any last-minute clean-up.
The ejbLoad()
and ejbStore()
methods in CMP entities are invoked when the entity bean's state is being
synchronized with the database. The ejbLoad() is invoked just after the
container has refreshed the bean container-managed fields with its state
from the database. The ejbStore() method is invoked just before the
container is about to write the bean container-managed fields to the
database. These methods are used to modify data as it's being synchronized.
This is common when the data stored in the database is different than the
data used in the bean fields.
The
ejbPassivate() and
ejbActivate()
methods are invoked on the bean by the container just before the bean is
passivated and just after the bean is activated, respectively. Passivation
in entity beans means that the bean instance is disassociated with its
remote reference so that the container can evict it from memory or reuse it.
It's a resource conservation measure the container employs to reduce the
number of instances in memory. A bean might be passivated if it hasn't been
used for a while or as a normal operation performed by the container to
maximize reuse of resources. Some containers will evict beans from memory,
while others will reuse instances for other more active remote references.
The ejbPassivate() and ejbActivate() methods provide the bean with a
notification as to when it's about to be passivated (disassociated with the
remote reference) or activated (associated with a remote reference).
|
|
Q: |
What is software architecture of EJB? |
|
A: |
Session and Entity EJBs consist of 4 and 5 parts respetively:
1.
A remote interface (a client interacts with it),
2.
A home interface (used for creating objects and for declaring business
methods),
3.
A bean object (an object, which actually performs business logic and
EJB-specific operations).
4.
A deployment descriptor (an XML file containing all information required for
maintaining the EJB) or a set of deployment descriptors (if you are using
some container-specific features).
5.A
Primary Key class - is only Entity bean specific. |
|
Q: |
Can Entity Beans have
no create() methods? |
|
A: |
Yes. In some cases the
data is inserted NOT using Java application, so you may only need to
retrieve the information, perform its processing, but not create your own
information of this kind. |
|
Q: |
What is bean managed
transaction? |
|
A: |
If a developer doesn't
want a Container to manage transactions, it's possible to implement all
database operations manually by writing the appropriate JDBC code. This
often leads to productivity increase, but it makes an Entity Bean
incompatible with some databases and it enlarges the amount of code to be
written. All transaction management is explicitly performed by a developer |
|
Q: |
What are transaction
attributes? |
|
A: |
The transaction
attribute specifies how the Container must manage transactions for a method
when a client invokes the method via the enterprise bean’s home or component
interface or when the method is invoked as the result of the arrival of a
JMS message. (Sun's EJB Specification) Below is a list of transactional
attributes:
1. NotSupported -
transaction context is unspecified.
2. Required -
bean's method invocation is made within a transactional context. If a client
is not associated with a transaction, a new transaction is invoked
automatically.
3. Supports - if
a transactional context exists, a Container acts like the transaction
attribute is Required, else - like NotSupported.
4. RequiresNew -
a method is invoked in a new transaction context.
5. Mandatory - if
a transactional context exists, a Container acts like the transaction
attribute is Required, else it throws a
javax.ejb.TransactionRequiredException.
6. Never - a
method executes only if no transaction context is specified.
|
|
Q: |
What are transaction
isolation levels in EJB? |
|
A: |
1. Transaction_read_uncommitted-
Allows a method to read uncommitted data from a DB(fast but not wise).
2.
Transaction_read_committed- Guarantees that the data you are
getting has been committed.
3.
Transaction_repeatable_read - Guarantees that all reads of
the database will be the same during the transaction (good for read and
update operations).
4.
Transaction_serializable- All the transactions for resource
are performed serial. |
NEXT
|