|
|
EJB Interview
|
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). |
|
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. |
|
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. |
|
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) |
|
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). |
|
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. |
|
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. |
|
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. |
|
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. |
NEXT
|