| |
| Q: |
How
EJB Invocation happens? |
| A: |
Step 1: Retrieve Home Object reference from
Naming Service via JNDI.
step 2: Return Home Object reference to
the client.
step 3: Create me a new EJB Object through
Home Object interface.
step 4: Create EJB Object from the Ejb Object
step 5: Return EJB Object reference to the
client.
step 6: Invoke business method using EJB
Object reference.
step 7: Delegate request to Bean (Enterprise
Bean). |
| |
[
Received from Ramana Bhavanasi]
|
|
| Q: |
Is
it possible to share an HttpSession between
a JSP and EJB? What happens when I change
a value in the HttpSession from inside
an EJB? |
| A: |
You
can pass the HttpSession as parameter to
an EJB method, only if all objects in session
are serializable.This has to be consider
as ?passed-by-value", that means that
it?s read-only in the EJB. If anything is
altered from inside the EJB, it won?t be
reflected back to the HttpSession of the
Servlet Container.The ?pass-by-reference?
can be used between EJBs Remote Interfaces,
as they are remote references. While it
IS possible to pass an HttpSession as a
parameter to an EJB object, it is considered
to be ?bad practice ? in terms of object
oriented design. This is because you are
creating an unnecessary coupling between
back-end objects (ejbs) and front-end objects
(HttpSession). Create a higher-level of
abstraction for your ejb?s api. Rather than
passing the whole, fat, HttpSession (which
carries with it a bunch of http semantics),
create a class that acts as a value object
(or structure) that holds all the data you
need to pass back and forth between front-end/back-end.
Consider the case where your ejb needs to
support a non-http-based client. This higher
level of abstraction will be flexible enough
to support it. |
| |
[
Received from Nishit Kamdar] |
|
| Q: |
The
EJB container implements the EJBHome and
EJBObject classes. For every request from
a unique client, does the container create
a separate instance of the generated EJBHome
and EJBObject classes? |
| A: |
The
EJB container maintains an instance pool.
The container uses these instances for the
EJB Home reference irrespective of the client
request. while refering the EJB Object classes
the container creates a separate instance
for each client request. The instance pool
maintainence is up to the implementation
of the container. If the container provides
one, it is available otherwise it is not
mandatory for the provider to implement
it. Having said that, yes most of the container
providers implement the pooling functionality
to increase the performance of the application
server. The way it is implemented is again
up to the implementer. |
| |
[
Received from Vishal Khasgiwala ]
|
|
| Q: |
Can
the primary key in the entity bean be
a Java primitive type such as int?
|
| A: |
The primary key can't be a primitive type--use
the primitive wrapper classes, instead.
For example, you can use java.lang.Integer
as the primary key class, but not int
(it has to be a class, not a primitive)
|
| |
[
Received from Prasanna
Inamanamelluri ] |
|
| Q: |
Can
you control when passivation occurs?
|
| A: |
The
developer, according to the specification,
cannot directly control when passivation
occurs. Although for Stateful Session
Beans, the container cannot passivate
an instance that is inside a transaction.
So using transactions can be a a strategy
to control passivation.
The
ejbPassivate() method is called during
passivation, so the developer has control
over what to do during this exercise and
can implement the require optimized logic.
Some
EJB containers, such as BEA WebLogic,
provide the ability to tune the container
to minimize passivation calls.
Taken
from the WebLogic 6.0 DTD -"The
passivation-strategy can be either "default"
or "transaction". With the default
setting the container will attempt to
keep a working set of beans in the cache.
With the "transaction" setting,
the container will passivate the bean
after every transaction (or method call
for a non-transactional invocation).
|
| |
[
Received from Prasanna Inamanamelluri
] |
|
| Q: |
What
is the advantage of using Entity bean
for database operations, over directly
using JDBC API to do database operations?
When would I use one over the other? |
| A: |
Entity
Beans actually represents the data in
a database. It is not that Entity Beans
replaces JDBC API. There are two types
of Entity Beans Container Managed and
Bean Mananged. In Container Managed Entity
Bean - Whenever the instance of the bean
is created the container automatically
retrieves the data from the DB/Persistance
storage and assigns to the object variables
in bean for user to manipulate or use
them. For this the developer needs to
map the fields in the database to the
variables in deployment descriptor files
(which varies for each vendor).
In
the Bean Managed Entity Bean - The developer
has to specifically make connection, retrive
values, assign them to the objects in
the ejbLoad() which will be called by
the container when it instatiates a bean
object. Similarly in the ejbStore() the
container saves the object values back
the the persistance storage. ejbLoad and
ejbStore are callback methods and can
be only invoked by the container. Apart
from this, when you use Entity beans you
dont need to worry about database transaction
handling, database connection pooling
etc. which are taken care by the ejb container.
But in case of JDBC you have to explicitly
do the above features. what suresh told
is exactly perfect. ofcourse, this comes
under the database transations, but i
want to add this. the great thing about
the entity beans of container managed,
whenever the connection is failed during
the transaction processing, the database
consistancy is mantained automatically.
the container writes the data stored at
persistant storage of the entity beans
to the database again to provide the database
consistancy. where as in jdbc api, we,
developers has to do manually. |
| |
[
Received from Prasanna
Inamanamelluri ] |
TOP
|
| Q: |
What
is EJB QL? |
| A: |
EJB
QL is a Query Language provided for navigation
across a network of enterprise beans and
dependent objects defined by means of
container managed persistence. EJB QL
is introduced in the EJB 2.0 specification.
The EJB QL query language defines finder
methods for entity beans with container
managed persistenceand is portable across
containers and persistence managers. EJB
QL is used for queries of two types of
finder methods: Finder methods that are
defined in the home interface of an entity
bean and which return entity objects.
Select methods, which are not exposed
to the client, but which are used by the
Bean Provider to select persistent values
that are maintained by the Persistence
Manager or to select entity objects that
are related to the entity bean on which
the query is defined.
|
| |
[
Received from Prasanna
Inamanamelluri ] |
|
| Q: |
Brief
description about local interfaces? |
| A: |
EEJB
was originally designed around remote
invocation using the Java Remote Method
Invocation (RMI) mechanism, and later
extended to support to standard CORBA
transport for these calls using RMI/IIOP.
This design allowed for maximum flexibility
in developing applications without consideration
for the deployment scenario, and was a
strong feature in support of a goal of
component reuse in J2EE.
Many
developers are using EJBs locally -- that
is, some or all of their EJB calls are
between beans in a single container.
With
this feedback in mind, the EJB 2.0 expert
group has created a local interface mechanism.
The local interface may be defined for
a bean during development, to allow streamlined
calls to the bean if a caller is in the
same container. This does not involve
the overhead involved with RMI like marshalling
etc. This facility will thus improve the
performance of applications in which co-location
is planned.
Local
interfaces also provide the foundation
for container-managed relationships among
entity beans with container-managed persistence.
|
| |
[
Received from Prasanna
Inamanamelluri ] |
|
| Q: |
What
are the special design care that must
be taken when you work with local interfaces?
|
| A: |
EIt
is important to understand that the calling
semantics of local interfaces are different
from those of remote interfaces. For example,
remote interfaces pass parameters using
call-by-value semantics, while local interfaces
use call-by-reference.
This
means that in order to use local interfaces
safely, application developers need to
carefully consider potential deployment
scenarios up front, then decide which
interfaces can be local and which remote,
and finally, develop the application code
with these choices in mind.
While
EJB 2.0 local interfaces are extremely
useful in some situations, the long-term
costs of these choices, especially when
changing requirements and component reuse
are taken into account, need to be factored
into the design decision.
|
| |
[
Received from Prasanna
Inamanamelluri ] |
|
| Q: |
What
happens if remove( ) is never invoked
on a session bean? |
| A: |
In
case of a stateless session bean it may
not matter if we call or not as in both
cases nothing is done. The number of beans
in cache is managed by the container.
In
case of stateful session bean, the bean
may be kept in cache till either the session
times out, in which case the bean is removed
or when there is a requirement for memory
in which case the data is cached and the
bean is sent to free pool. |
| |
[
Received from Prasanna
Inamanamelluri ] |
|
| Q: |
What
is the difference between Message Driven
Beans and Stateless Session beans? |
| A: |
In
several ways, the dynamic creation and
allocation of message-driven bean instances
mimics the behavior of stateless session
EJB instances, which exist only for the
duration of a particular method call.
However, message-driven beans are different
from stateless session EJBs (and other
types of EJBs) in several significant
ways:
Message-driven beans process multiple
JMS messages asynchronously, rather than
processing a serialized sequence of method
calls.
Message-driven beans have no home or remote
interface, and therefore cannot be directly
accessed by internal or external clients.
Clients interact with message-driven beans
only indirectly, by sending a message
to a JMS Queue or Topic.
Note:
Only the container directly interacts
with a message-driven bean by creating
bean instances and passing JMS messages
to those instances as necessary.
The Container maintains the entire lifecycle
of a message-driven bean; instances cannot
be created or removed as a result of client
requests or other API calls. |
| |
[
Received from Prasanna
Inamanamelluri ] |
|
| Q: |
How
can I call one EJB from inside of another
EJB? |
| A: |
EJBs
can be clients of other EJBs. It just
works. Use JNDI to locate the Home Interface
of the other bean, then acquire an instance
reference, and so forth. |
| |
[
Received from Prasanna
Inamanamelluri ] |
|
| Q: |
What
is an EJB Context? |
| A: |
EJBContext
is an interface that is implemented by
the container, and it is also a part of
the bean-container contract. Entity beans
use a subclass of EJBContext called EntityContext.
Session beans use a subclass called SessionContext.
These EJBContext objects provide the bean
class with information about its container,
the client using the bean and the bean
itself. They also provide other functions.
See the API docs and the spec for more
details. |
| |
[
Received from Prasanna
Inamanamelluri ] |
|
| Q: |
The
EJB container implements the EJBHome and
EJBObject classes. For every request from
a unique client, does the container create
a separate instance of the generated EJBHome
and EJBObject classes? |
| A: |
The
EJB container maintains an instance pool.
The container uses these instances for
the EJB Home reference irrespective of
the client request. While refering the
EJB Object classes the container creates
a separate instance for each client request.
The instance pool maintainence is up to
the implementation of the container. If
the container provides one, it is available
otherwise it is not mandatory for the
provider to implement it. Having said
that, yes most of the container providers
implement the pooling functionality to
increase the performance of the application
server. The way it is implemented is again
up to the implementer.
|
| |
[
Received from Vishal
Khasgiwala ] |
|
|
|