EJB Interview Questions And Answers

Q: What are the different kinds of enterprise beans?
A: Different kind of enterrise beans are Stateless session bean, Stateful session bean,
Entity bean, Message-driven bean...........
Q: What is Session Bean?
A: A session bean is a non-persistent object that implements some business logic running
on the server. One way to think of a session object...........
Q: What is Entity Bean?
A: The entity bean is used to represent data in the database. It provides an object-oriented
interface to ...........
Q: What are the methods of Entity Bean?
A: An entity bean consists of 4 groups of methods, create methods...........
Q: What is the difference between Container-Managed Persistent (CMP) bean and
Bean-Managed Persistent(BMP) ?
A: Container-managed persistence (CMP) and bean-managed persistence (BMP). With
CMP, the container manages the persistence of the entity bean............
Q: What are the callback methods in Entity beans?
A: Callback methods allows the container to notify the bean of events in
its life cycle. The callback methods are defined in the javax.ejb.EntityBean interface............
Q: What is software architecture of EJB?
A: Session and Entity EJBs consist of 4 and 5 parts respectively, a remote interface...........
Q: Can Entity Beans have no create() methods?
A: Yes. In some cases the data is inserted NOT using Java application,...........
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...........
Q: What are transaction attributes?
34
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...........
Q: What are transaction isolation levels in EJB?
A: Transaction_read_uncommitted , Transaction_read_committed ,
Transaction_repeatable_read...........
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 readonly
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
35
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
36
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 colocation
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?
37
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-byvalue
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.
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.
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 ic.
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.
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.
38
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.
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.

1 comment:

Mohit Mishra said...

Good questions!!!

I have also added some 2000 odd Core Java and J2EE questions in

Java Interview Questions

Have a look at them and reply.