Tuesday, 17 April 2012

EJB Interview Questions



EJB Interview Questions
http://capptitudebank.com 1/39
EJB INTERVIEW QUESTIONS
How EJB Invocation happens?
• Retrieve Home Object reference from Naming Service via JNDI
• Return Home Object reference to the client
• Create me a new EJB Object through Home Object interface
• Create EJB Object from the Ejb Object
• Return EJB Object reference to the client
• Invoke business method using EJB Object reference
• Delegate request to Bean (Enterprise Bean).
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?
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-byreference?
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.
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?
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

EJB Interview Questions
http://capptitudebank.com 2/39
providers implement the pooling functionality to increase the performance of the
application server. The way it is implemented is again up to the implementer.
Can the primary key in the entity bean be a Java primitive type such as int?
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)
Can you control when passivation occurs?
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).
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?
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()
EJB Interview Questions
http://capptitudebank.com 3/39
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.


What is EJB QL?
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.

Write a brief description about local interfaces
EJB 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.
EJB Interview Questions
http://capptitudebank.com 4/39
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.
What are the special design care that must be taken when you work with
local interfaces?
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-byreference.
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.
What happens if remove( ) is never invoked on a session bean?
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.

What is the difference between Message Driven Beans and Stateless Session
beans?
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.
EJB Interview Questions
http://capptitudebank.com 5/39
• 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.
How can I call one EJB from inside of another EJB?
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.
What is an EJB Context?
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.
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?
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.
What is EJB?
Enterprise JavaBeans (EJB) technology is the server-side component
architecture for the Java 2 Platform, Enterprise Edition (J2EE) platform. EJB
technology enables rapid and simplified development of distributed, transactional,
secure and portable applications based on Java technology.
What are the different types of Enterprise JavaBeans?
EJB Interview Questions
http://capptitudebank.com 6/39
There are 3 types of enterprise beans, namely: Session bean, Entity beans
and Message driven beans.
What is Session Bean?
Session bean represents a single client inside the J2EE server. To access the
application deployed in the server the client invokes methods on the session bean.
The session bean performs the task shielding the client from the complexity of the
business logic.
Session bean components implement the javax.ejb.SessionBean interface.
Session beans can act as agents modeling workflow or provide access to special
transient business services. Session beans do not normally represent persistent
business concepts. A session bean corresponds to a client server session. The
session bean is created when a client requests some query on the database and
exists as long as the client server session exists.
What are different types of session bean ?
There are two types of session beans, namely: Stateful and Stateless.
What is a Stateful Session bean?
Stateful session bean maintain the state of the conversation between the
client and itself. When the client invokes a method on the bean the instance
variables of the bean may contain a state but only for the duration of the invocation.
A stateful session bean is an enterprise bean (EJB component) that acts as a
server-side extension of the client that uses it. The stateful session bean is created
by a client and will work for only that client until the client connection is dropped or
the bean is explicitly removed. The stateful session bean is EJB component that
implements the javax.ejb.SessionBean interface and is deployed with the declarative
attribute "stateful". Stateful session beans are called "stateful" because they
maintain a conversational state with the client. In other words, they have state or
instance fields that can be initialized and changed by the client with each method
invocation. The bean can use the conversational state as it process business
methods invoked by the client.
What is stateless session bean ?
Stateless session beans are of equal value for all instances of the bean. This
means the container can assign any bean to any client, making it very scalable.
A stateless session bean is an enterprise bean that provides a stateless
service to the client. Conceptually, the business methods on a stateless session bean
EJB Interview Questions
http://capptitudebank.com 7/39
are similar to procedural applications or static methods; there is no instance state,
so all the data needed to execute the method is provided by the method arguments.
The stateless session bean is an EJB component that implements the
javax.ejb.SessionBean interface and is deployed with the declarative attribute
"stateless". Stateless session beans are called "stateless" because they do not
maintain conversational state specific to a client session. In other words, the
instance fields in a stateless session bean do not maintain data relative to a client
session. This makes stateless session beans very lightweight and fast, but also limits
their behavior. Typically an application requires less number of stateless beans
compared to stateful beans.
What is an Entity Bean?
An entity bean represents a business object in a persistent storage
mechanism. An entity bean typically represents a table in a relational database and
each instance represents a row in the table. Entity bean differs from session bean
by: persistence, shared access, relationship and primary key. T
What are different types of entity beans?
There are two types of entity beans available. Container Managed Persistence
(CMP) , Bean managed persistence (BMP).
What is CMP (Container Managed Persistence)?
The term container-managed persistence means that the EJB container
handles all database access required by the entity bean. The bean's code contains no
database access (SQL) calls. As a result, the bean's code is not tied to a specific
persistent storage mechanism (database). Because of this flexibility, even if you
redeploy the same entity bean on different J2EE servers that use different databases,
you won't need to modify or recompile the bean's code. So, your entity beans are
more portable.
What is BMP (Bean managed persistence)?
Bean managed persistence (BMP) occurs when the bean manages its
persistence. Here the bean will handle all the database access. So the bean's code
contains the necessary SQLs calls. So it is not much portable compared to CMP.
Because when we are changing the database we need to rewrite the SQL for
supporting the new database.
EJB Interview Questions
http://capptitudebank.com 8/39
What is abstract schema?
In order to generate the data access calls, the container needs information
that you provide in the entity bean's abstract schema. It is a part of Deployment
Descriptor. It is used to define the bean's persistent fields and relation ships.
When we should use Entity Bean?
When the bean represents a business entity, not a procedure. we should use
an entity bean. Also when the bean's state must be persistent we should use an
entity bean. If the bean instance terminates or if the J2EE server is shut down, the
bean's state still exists in persistent storage (a database).
When to Use Session Beans?
At any given time, only one client has access to the bean instance. The state
of the bean is not persistent, existing only for a short period (perhaps a few hours).
The bean implements a web service. Under all the above circumstances we can use
session beans.
When to use Stateful session bean?
The bean's state represents the interaction between the bean and a specific
client. The bean needs to hold information about the client across method
invocations. The bean mediates between the client and the other components of the
application, presenting a simplified view to the client. Under all the above
circumstances we can use a stateful session bean.
When to use a stateless session bean?
The bean's state has no data for a specific client. In a single method
invocation, the bean performs a generic task for all clients. For example, you might
use a stateless session bean to send an email that confirms an online order. The
bean fetches from a database a set of read-only data that is often used by clients.
Such a bean, for example, could retrieve the table rows that represent the products
that are on sale this month. Under all the above circumstance we can use a stateless
session bean.
How EJB Invocation happens?
• Retrieve Home Object reference from Naming Service via JNDI.
• Return Home Object reference to the client.
• Create me a new EJB Object through Home Object interface.
• Create EJB Object from the Ejb Object.
• Return EJB Object reference to the client.
EJB Interview Questions
http://capptitudebank.com 9/39
• Invoke business method using EJB Object reference. Delegate request to
Bean (Enterprise Bean).
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?
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-byreference
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
EJBs 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.
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?
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 maintenance 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.
Can the primary key in the entity bean be a Java primitive type such as int?
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).
EJB Interview Questions
http://capptitudebank.com 10/39
Can you control when passivation occurs?
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).
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?
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.
What is EJB QL?
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
EJB Interview Questions
http://capptitudebank.com 11/39
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.
Write a brief description about local interfaces?
EJB 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.
What are the special design care that must be taken when you work with
local interfaces?
It 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-byreference.
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.
EJB Interview Questions
http://capptitudebank.com 12/39
What happens if remove( ) is never invoked on a session bean?
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.
What is the difference between Message Driven Beans and Stateless Session
beans?
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. 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.
How can I call one EJB from inside of another EJB?
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.
What is an EJB Context?
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.
What are the different kinds of enterprise beans?
Different kind of enterrise beans are Stateless session bean, Stateful session
bean, Entity bean, Message-driven bean.
EJB Interview Questions
http://capptitudebank.com 13/39
What is Session Bean?
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.
What are the methods of Entity Bean?
An entity bean consists of 4 groups of methods, create methods.
What is the difference between Container-Managed Persistent (CMP) bean
and Bean-Managed Persistent(BMP)?
Container-managed persistence (CMP) and bean-managed persistence (BMP).
With CMP, the container manages the persistence of the entity bean.
What are the callback methods in Entity beans?
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.
What is software architecture of EJB?
Session and Entity EJBs consist of 4 and 5 parts respectively, a remote
interface.
Can Entity Beans have no create() methods?
Yes. In some cases the data is inserted NOT using Java application,.
What is bean managed transaction?
If a developer doesn’t want a Container to manage transactions, it’s possible
to implement all database operations manually.
What are transaction attributes?
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.
What are transaction isolation levels in EJB?
• Transaction_read_uncommitted
• Transaction_read_committed
• Transaction_repeatable_read.
Is it possible for an EJB client to marshal an object of class java.lang.Class
to an EJB?
Technically yes, spec. compliant NO! - The enterprise bean must not attempt
to query a class to obtain information about the declared members that are not
otherwise accessible to the enterprise bean because of the security rules of the Java
language.
EJB Interview Questions
http://capptitudebank.com 14/39
Is it legal to have static initializer blocks in EJB?
Although technically it is legal, static initializer blocks are used to execute
some piece of code before executing any constructor or method while instantiating a
class. Static initializer blocks are also typically used to initialize static fields - which
may be illegal in EJB if they are read/write - In EJB this can be achieved by including
the code in either the ejbCreate(), setSessionContext() or setEntityContext()
methods.
Is it possible to stop the execution of a method before completion in a
SessionBean?
Stopping the execution of a method inside a Session Bean is not possible
without writing code inside the Session Bean. This is because you are not allowed to
access Threads inside an EJB.
What is the default transaction attribute for an EJB?
There is no default transaction attribute for an EJB. Section 11.5 of EJB v1.1
spec says that the deployer must specify a value for the transaction attribute for
those methods having container managed transaction. In WebLogic, the default
transaction attribute for EJB is SUPPORTS.
What is the difference between session and entity beans? When should I
use one or the other?
An entity bean represents persistent global data from the database; a session
bean represents transient user-specific data that will die when the user disconnects
(ends his session). Generally, the session beans implement business methods (e.g.
Bank.transferFunds) that call entity beans (e.g. Account.deposit, Account.withdraw)
Is there any default cache management system with Entity beans? In other
words whether a cache of the data in database will be maintained in EJB?
Caching data from a database inside the Application Server are what Entity
EJB’s are used for.The ejbLoad() and ejbStore() methods are used to synchronize the
Entity Bean state with the persistent storage(database). Transactions also play an
important role in this scenario. If data is removed from the database, via an external
application - your Entity Bean can still be “alive” the EJB container. When the
transaction commits, ejbStore() is called and the row will not be found, and the
transaction rolled back.
Why is ejbFindByPrimaryKey mandatory?
An Entity Bean represents persistent data that is stored outside of the EJB
Container/Server. The ejbFindByPrimaryKey is a method used to locate and load an
EJB Interview Questions
http://capptitudebank.com 15/39
Entity Bean into the container, similar to a SELECT statement in SQL. By making this
method mandatory, the client programmer can be assured that if they have the
primary key of the Entity Bean, then they can retrieve the bean without having to
create a new bean each time - which would mean creating duplications of persistent
data and break the integrity of EJB.
Why do we have a remove method in both EJBHome and EJBObject?
With the EJBHome version of the remove, you are able to delete an entity
bean without first instantiating it (you can provide a PrimaryKey object as a
parameter to the remove method). The home version only works for entity beans.
On the other hand, the Remote interface version works on an entity bean that you
have already instantiated. In addition, the remote version also works on session
beans (stateless and stateful) to inform the container of your loss of interest in this
bean.
How can I call one EJB from inside of another EJB?
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.
What is the difference between a Server, a Container, and a Connector?
An EJB server is an application, usually a product such as BEA WebLogic, that
provides (or should provide) for concurrent client connections and manages system
resources such as threads, processes, memory, database connections, network
connections, etc. An EJB container runs inside (or within) an EJB server, and
provides deployed EJB beans with transaction and security management, etc. The
EJB container insulates an EJB bean from the specifics of an underlying EJB server by
providing a simple, standard API between the EJB bean and its container. A
Connector provides the ability for any Enterprise Information System (EIS) to plug
into any EJB server which supports the Connector architecture.
How is persistence implemented in enterprise beans?
Persistence in EJB is taken care of in two ways, depending on how you
implement your beans: container managed persistence (CMP) or bean managed
persistence (BMP) For CMP, the EJB container which your beans run under takes care
of the persistence of the fields you have declared to be persisted with the database -
this declaration is in the deployment descriptor. So, anytime you modify a field in a
CMP bean, as soon as the method you have executed is finished, the new data is
persisted to the database by the container. For BMP, the EJB bean developer is
responsible for defining the persistence routines in the proper places in the bean, for
EJB Interview Questions
http://capptitudebank.com 16/39
instance, the ejbCreate(), ejbStore(), ejbRemove() methods would be developed by
the bean developer to make calls to the database. The container is responsible, in
BMP, to call the appropriate method on the bean. So, if the bean is being looked up,
when the create() method is called on the Home interface, then the container is
responsible for calling the ejbCreate() method in the bean, which should have
functionality inside for going to the database and looking up the data.
What is an EJB Context?
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.
Is method overloading allowed in EJB?
Yes you can overload methods
Should synchronization primitives be used on bean methods?
No. The EJB specification specifically states that the enterprise bean is not
allowed to use thread primitives. The container is responsible for managing
concurrent access to beans at runtime.
Are we allowed to change the transaction isolation property in middle of a
transaction?
No. You cannot change the transaction isolation level in the middle of
transaction.
For Entity Beans, What happens to an instance field not mapped to any
persistent storage, when the bean is passivated?
The specification infers that the container never serializes an instance of an
Entity bean (unlike stateful session beans). Thus passivation simply involves moving
the bean from the “ready” to the “pooled” bin. So what happens to the contents of
an instance variable is controlled by the programmer. Remember that when an entity
bean is passivated the instance gets logically disassociated from it’s remote object.
Be careful here, as the functionality of passivation/activation for Stateless Session,
Stateful Session and Entity beans is completely different. For entity beans the
ejbPassivate method notifies the entity bean that it is being disassociated with a
particular entity prior to reuse or for dereference.
EJB Interview Questions
http://capptitudebank.com 17/39
What is a Message Driven Bean, what functions does a message driven bean
have and how do they work in collaboration with JMS?
Message driven beans are the latest addition to the family of component bean
types defined by the EJB specification. The original bean types include session beans,
which contain business logic and maintain a state associated with client sessions,
and entity beans, which map objects to persistent data. Message driven beans will
provide asynchrony to EJB based applications by acting as JMS message consumers.
A message bean is associated with a JMS topic or queue and receives JMS messages
sent by EJB clients or other beans. Unlike entity beans and session beans, message
beans do not have home or remote interfaces. Instead, message driven beans are
instantiated by the container as required. Like stateless session beans, message
beans maintain no client-specific state, allowing the container to optimally manage a
pool of message-bean instances. Clients send JMS messages to message beans in
exactly the same manner as they would send messages to any other JMS
destination. This similarity is a fundamental design goal of the JMS capabilities of the
new specification. To receive JMS messages, message driven beans implement the
javax.jms.MessageListener interface, which defines a single “onMessage()” method.
When a message arrives, the container ensures that a message bean corresponding
to the message topic/queue exists (instantiating it if necessary), and calls its
onMessage method passing the client’s message as the single argument. The
message bean’s implementation of this method contains the business logic required
to process the message. Note that session beans and entity beans are not allowed to
function as message beans.
Does RMI-IIOP support code downloading for Java objects sent by value
across an IIOP connection in the same way as RMI does across a JRMP
connection?
Yes. The JDK 1.2 support the dynamic class loading.
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?
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
EJB Interview Questions
http://capptitudebank.com 18/39
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.
What is the advantage of putting an Entity Bean instance from the “Ready
State” to “Pooled state”?
The idea of the “Pooled State” is to allow a container to maintain a pool of
entity beans that has been created, but has not been yet “synchronized” or assigned
to an EJBObject. This mean that the instances do represent entity beans, but they
can be used only for serving Home methods (create or findBy), since those methods
do not relay on the specific values of the bean. All these instances are, in fact,
exactly the same, so, they do not have meaningful state. Jon Thorarinsson has also
added: It can be looked at it this way: If no client is using an entity bean of a
particular type there is no need for cachig it (the data is persisted in the database).
Therefore, in such cases, the container will, after some time, move the entity bean
from the “Ready State” to the “Pooled state” to save memory. Then, to save
additional memory, the container may begin moving entity beans from the “Pooled
State” to the “Does Not Exist State”, because even though the bean’s cache has
been cleared, the bean still takes up some memory just being in the “Pooled State”.
Can a Session Bean be defined without ejbCreate() method?
The ejbCreate() methods is part of the bean’s lifecycle, so, the compiler will
not return an error because there is no ejbCreate() method. However, the J2EE spec
is explicit: the home interface of a Stateless Session Bean must have a single
create() method with no arguments, while the session bean class must contain
exactly one ejbCreate() method, also without arguments. Stateful Session Beans can
have arguments (more than one create method) stateful beans can contain multiple
ejbCreate() as long as they match with the home interface definition. You need a
reference to your EJBObject to startwith. For that Sun insists on putting a method for
creating that reference (create method in the home interface). The EJBObject does
matter here. Not the actual bean.
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?
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-byEJB
Interview Questions
http://capptitudebank.com 19/39
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 (1)” 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. (1) Core J2EE design
patterns (2001)
Is there any way to read values from an entity bean without locking it for
the rest of the transaction (e.g. read-only transactions)?
We have a key-value map bean which deadlocks during some concurrent
reads. Isolation levels seem to affect the database only, and we need to work within
a transaction.
The only thing that comes to (my) mind is that you could write a ‘group
accessor’ - a method that returns a single object containing all of your entity bean’s
attributes (or all interesting attributes). This method could then be placed in a
‘Requires New’ transaction. This way, the current transaction would be suspended for
the duration of the call to the entity bean and the entity bean’s fetch/operate/commit
cycle will be in a separate transaction and any locks should be released immediately.
Depending on the granularity of what you need to pull out of the map, the group
accessor might be overkill.
What is the difference between a “Coarse Grained” Entity Bean and a “Fine
Grained” Entity Bean?
A ‘fine grained’ entity bean is pretty much directly mapped to one relational
table, in third normal form. A ‘coarse grained’ entity bean is larger and more
complex, either because its attributes include values or lists from other tables, or
because it ‘owns’ one or more sets of dependent objects. Note that the coarse
grained bean might be mapped to a single table or flat file, but that single table is
going to be pretty ugly, with data copied from other tables, repeated field groups,
columns that are dependent on non-key fields, etc. Fine grained entities are
generally considered a liability in large systems because they will tend to increase
the load on several of the EJB server’s subsystems (there will be more objects
EJB Interview Questions
http://capptitudebank.com 20/39
exported through the distribution layer, more objects participating in transactions,
more skeletons in memory, more EJB Objects in memory, etc.)
What is EJBDoclet?
EJBDoclet is an open source JavaDoc doclet that generates a lot of the EJB
related source files from custom JavaDoc comments tags embedded in the EJB
source file.
Are enterprise beans allowed to use Thread.sleep()?
Enterprise beans make use of the services provided by the EJB container,
such as life-cycle management. To avoid conflicts with these services, enterprise
beans are restricted from performing certain operations: Managing or synchronizing
threads
Is it possible to write two EJB’s that share the same Remote and Home
interfaces, and have different bean classes? if so, what are the
advantages/disadvantages?
It’s certainly possible. In fact, there’s an example that ships with the Inprise
Application Server of an Account interface with separate implementations for
CheckingAccount and SavingsAccount, one of which was CMP and one of which was
BMP.
Is it possible to specify multiple JNDI names when deploying an EJB?
No. To achieve this you have to deploy your EJB multiple times each
specifying a different JNDI name.
Is there any way to force an Entity Bean to store itself to the db? I don’t
wanna wait for the container to update the db, I want to do it NOW! Is it
possible?
Specify the transaction attribute of the bean as RequiresNew. Then as per
section 11.6.2.4 of the EJB v 1.1 spec EJB container automatically starts a new
transaction before the method call. The container also performs the commit protocol
before the method result is sent to the client.
I am developing a BMP Entity bean. I have noticed that whenever the create
method is invoked, the ejbLoad() and the ejbStore() methods are also
invoked. I feel that once my database insert is done, having to do a select
and update SQL queries is major overhead. is this behavior typical of all EJB
containers? Is there any way to suppress these invocations?
EJB Interview Questions
http://capptitudebank.com 21/39
This is the default behaviour for EJB. The specification states that ejbLoad()
will be called before every transaction and ejbStore() after every transaction. Each
Vendor has optimizations, which are proprietary for this scenario.
Can an EJB send asynchronous notifications to its clients?
Asynchronous notification is a known hole in the first versions of the EJB spec.
The recommended solution to this is to use JMS, which is becoming available in
J2EE-compliant servers. The other option, of course, is to use client-side threads and
polling. This is not an ideal solution, but it’s workable for many scenarios.
How can I access EJB from ASP?
You can use the Java 2 Platform, Enterprise Edition Client Access Services
(J2EETM CAS) COM Bridge 1.0, currently downloadable from Sun
Is there a guarantee of uniqueness for entity beans?
There is no such guarantee. The server (or servers) can instantiate as many
instances of the same underlying Entity Bean (with the same PK) as it wants.
However, each instance is guaranteed to have up-to-date data values, and be
transactionally consistent, so uniqueness is not required. This allows the server to
scale the system to support multiple threads, multiple concurrent requests, and
multiple hosts.
How do the six transaction attributes map to isolation levels like “dirty
read”? Will an attribute like “Required” lock out other readers until I’m
finished updating?
The Transaction Attributes in EJB do not map to the Transaction Isolation
levels used in JDBC. This is a common misconception. Transaction Attributes specify
to the container when a Transaction should be started, suspended(paused) and
committed between method invocations on Enterprise JavaBeans. For more details
and a summary of Transaction Attributes refer to section 11.6 of the EJB 1.1
specification.
I have created a remote reference to an EJB in FirstServlet. Can I put the
reference in a servlet session and use that in SecondServlet?
Yes. The EJB client (in this case your servlet) acquires a remote reference to
an EJB from the Home Interface; that reference is serializable and can be passed
from servlet to servlet. If it is a session bean, then the EJB server will consider your
web client’s servlet session to correspond to a single EJB session, which is usually
(but not always) what you want.
EJB Interview Questions
http://capptitudebank.com 22/39
Can the primary key in the entity bean be a Java primitive type such as int?
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)
What’s new in the EJB 2.0 specification?
Following are the main features supported in EJB 2.0: Integration of EJB with
JMS, Message Driven Beans, Implement additional Business methods in Home
interface which are not specific for bean instance, EJB QL.
How many types of protocol implementations does RMI have?
• RMI has at least three protocol implementations:
• Java Remote Method Protocol (JRMP)
• Internet Inter ORB Protocol (IIOP)
• Jini Extensible Remote Invocation(JERI)
These are alternatives, not part of the same thing, All three are indeed layer
6 protocols for those who are still speaking OSI reference model.
What is the need of Remote and Home interfaces. Why can’t there be one?
In a few words, I would say that the main reason is because there is a clear
division of roles and responsabilities between the two interfaces. The home interface
is your way to communicate with the container, that is who is responsable of
creating, locating even removing one or more beans. The remote interface is your
link to the bean, that will allow you to remotely access to all its methods and
members. As you can see there are two distinct elements (the container and the
beans) and you need two different interfaces for accessing to both of them.
What is the difference between Java Beans and EJB?
Java Beans are client-side objects and EJBs are server side object, and they
have completely different development, lifecycle, purpose.
What happens if both my EJB Server and Database crash, what will happen
to unsaved changes? Is there any transactional log file used?
Actually, if your EJB server crashes, you will not even be able to make a
connection to the server to perform a bean lookup, as the server will no longer be
listening on the port for incoming JNDI lookup requests. You will lose any data that
wasn’t committed prior to the crash. This is where you should start looking into
clustering your EJB server. Any unsaved and uncommited changes are lost the
moment your EJB Server crashes. If your database also crashes, then all the saved
changes are also lost unless you have some backup or some recovery mechanism to
EJB Interview Questions
http://capptitudebank.com 23/39
retrieve the data. So consider database replication and EJB Clustering for such
scenarios, though the occurence of such a thing is very very rare. Thx, Uma All
databse have the concept of log files(for exampe oracle have redo log files concept).
So if data bases crashes then on starting up they fill look up the log files to perform
all pending jobs. But is EJB crashes, It depend upon the container how frequenlty it
passivates or how frequesntly it refreshes the data with Database.
Can you control when passivation occurs?
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).”
Does RMI-IIOP support dynamic downloading of classes?
No, RMI-IIOP doesn’t support dynamic downloading of the classes as it is
done with CORBA in DII (Dynamic Interface Invocation).Actually RMI-IIOP combines
the usability of Java Remote Method Invocation (RMI) with the interoperability of the
Internet Inter-ORB Protocol (IIOP).So in order to attain this interoperability between
RMI and CORBA,some of the features that are supported by RMI but not CORBA and
vice versa are eliminated from the RMI-IIOP specification.
Does EJB 1.1 support mandate the support for RMI-IIOP ? What is the
meaning of “the client API must support the Java RMI-IIOP programming
model for portability, but the underlying protocol can be anything”?
EJB1.1 does mandate the support of RMI-IIOP. There are 2 types of
implementations that an EJB Server might provide: CORBA-based EJB Servers and
Proprietry EJB Servers. Both support the RMI-IIOP API but how that API is
implemented is a different story. (NB: By API we mean the interface provided to the
client by the stub or proxy). A CORBA-based EJB Server actually implements its EJB
Objects as CORBA Objects (it therefore encorporates an ORB and this means that
EJB Interview Questions
http://capptitudebank.com 24/39
EJB’s can be contacted by CORBA clients (as well as RMI-IIOP clients) A proprietry
EJB still implements the RMI-IIOP API (in the client’s stub) but the underlying
protocol can be anything. Therefore your EJB’s CANNOT be contacted by CORBA
clients. The difference is that in both cases, your clients see the same API (hence,
your client portability) BUT how the stubs communicate with the server is different.
The EJB specification says that we cannot use Bean Managed Transaction in
Entity Beans. Why?
The short, practical answer is… because it makes your entity beans useless as
a reusable component. Also, transaction management is best left to the application
server - that’s what they’re there for. It’s all about atomic operations on your data. If
an operation updates more than one entity then you want the whole thing to succeed
or the whole thing to fail, nothing in between. If you put commits in the entity beans
then it’s very difficult to rollback if an error occurs at some point late in the
operation.
Can I invoke Runtime.gc() in an EJB?
You shouldn’t. What will happen depends on the implementation, but the call
will most likely be ignored. You should leave system level management like garbage
collection for the container to deal with. After all, that’s part of the benefit of using
EJBs, you don’t have to manage resources yourself.
What is clustering? What are the different algorithms used for clustering?
Clustering is grouping machines together to transparantly provide enterprise
services.The client does not now the difference between approaching one server or
approaching a cluster of servers.Clusters provide two benefits: scalability and high
availability. Further information can be found in the JavaWorld article J2EE
Clustering.
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?
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
EJB Interview Questions
http://capptitudebank.com 25/39
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.
What is the role of serialization in EJB?
A big part of EJB is that it is a framework for underlying RMI: remote method
invocation. You’re invoking methods remotely from JVM space ‘A’ on objects which
are in JVM space ‘B’ — possibly running on another machine on the network. To
make this happen, all arguments of each method call must have their current state
plucked out of JVM ‘A’ memory, flattened into a byte stream which can be sent over
a TCP/IP network connection, and then deserialized for reincarnation on the other
end in JVM ‘B’ where the actual method call takes place. If the method has a return
value, it is serialized up for streaming back to JVM A. Thus the requirement that all
EJB methods arguments and return values must be serializable. The easiest way to
do this is to make sure all your classes implement java.io.Serializable.
What is EJB QL?
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
EJB Interview Questions
http://capptitudebank.com 26/39
or to select entity objects that are related to the entity bean on which the query is
defined
What is the relationship between local interfaces and container-managed
relationships?
Entity beans that have container-managed relationships with other entity
beans, must be accessed in the same local scope as those related beans, and
therefore typically provide a local client view. In order to be the target of a
container-managed relationship, an entity bean with container-managed persistence
must provide a local interface.
What does a remove method do for different cases of beans?
Stateless Session: Does not do anything to the bean as moving the bean
from free pool to cache is managed by the container depending on load.
Stateful Session: Removes the bean from the cache. Entity Bean: Deletes
the bean (data) from persistent storage
How does a container-managed relationship work?
An entity bean accesses related entity beans by means of the accessor
methods for its container-managed relationship fields, which are specified by the
cmr-field elements of its abstract persistence schema defined in the deployment
descriptor. Entity bean relationships are defined in terms of the local interfaces of the
related beans, and the view an entity bean presents to its related beans is defined by
its local home and local interfaces. Thus, an entity bean can be the target of a
relationship from another entity bean only if it has a local interface.
What is the new basic requirement for a CMP entity bean class in 2.0 from
that of ejb 1.1?
It must be abstract class. The container extends it and implements methods
which are required for managing the relationships
What are the basic classes required in the client for invoking an EJB?
• Home and the remote interfaces
• Implementation of the Naming Context Factory
• Stubs and skeletons
In some App servers the stubs and the skeletons can be dynamically
downloaded from the server
EJB Interview Questions
http://capptitudebank.com 27/39
What is the difference between Message Driven Beans and Stateless Session
beans?
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.
• 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.
What is the need for Clustering?
To scale the application so that it is highly available and has high throughput.
What are the benefits of Clustering and workload management?
• It balances client processing requests, allowing incoming work requests to
be distributed according to a configured Workload Management selection
policy.
• It provides fail over capability by redirecting client requests to a running
server when one or more servers are unavailable. This improves the
availability of applications and administrative services.
• It enables systems to be scaled up to serve a higher client load than
provided by the basic configuration. With server groups and clones
additional instances of servers can easily be added to the configuration.
• It enables servers to be transparently maintained and upgraded while
applications remain available for users.
• It centralizes administration of application servers and other objects.
EJB Interview Questions
http://capptitudebank.com 28/39
What are the types of Scaling?
There are two types of scaling: Vertical Scaling and Horizontal Scaling.
What is Vertical Scaling?
When multiple server clones of an application server are defined on the same
physical m/c, it is called Vertical Scaling. The objective is to use the processing
power of that m/c more efficiently.
What is Horizontal Scaling?
When Clones of an application server are defined on multiple physical m/c, it
is called Horizontal Scaling. The objective is to use more than one less powerful m/c
more efficiently.
What is a Server Group?
A server group is a template of an Application Server(and its contents) i.e, it
is a logical representation of the application server. It has the same structure and
attributes as the real Application Server, but it is not associated with any node, and
does not correspond to any real server process running on any node.
What is a Clone?
The copies of a server group are called Clones. But unlike a Server Group
Clones are associated with a node and are real server process running in that node.
What is Ripple Effect?
The process of propagating the changes in the properties of a server group
during runtime to all the associated clones is called Ripple Effect.
What level of Load Balancing is possible with EJBs?
The workload management service provides load balancing for the following
types of enterprise beans: Homes of entity or session beans, Instances of entity
beans, Instances of stateless session beans.
What is the basic requirement for in-memory replication in Weblogic?
The data in session should consist only of Serialized objects. Only setAttribute
function should be used to set objects in session.
How JDBC services can be used in clustered environment?
Identical DataSource has to be created in each clustered server instances and
configure to use different connection pools.
Mention some tools to cluster Web Servers?
Web Servers can be clustered using Edge Server or DNS.
EJB Interview Questions
http://capptitudebank.com 29/39
What is in-memory replication?
The process by which the contents in the memory of one physical m/c are
replicated in all the m/c in the cluster is called in-memory replication.
Difference Between Abstraction and Encapsulation:
Abstraction is removing some distinctions between objects, so as to show
their commonalities. Encapsulation is hiding the details of the implementation of an
object so that there are no external dependencies on the particular implementation.
What is EJB?
EJB stands for Enterprise JavaBean and is a widely-adopted server side
component architecture for J2EE. It enables rapid development of mission-critical
application that are versatile, reusable and portable across middleware while
protecting IT investment and preventing vendor lock-in.
What is session Facade?
Session Facade is a design pattern to access the Entity bean through local
interface than accessing directly. It increases the performance over the network. In
this case we call session bean which on turn call entity bean.
What is EJB role in J2EE?
EJB technology is the core of J2EE. It enables developers to write reusable
and portable server-side business logic for the J2EE platform.
What is the difference between EJB and Java beans?
EJB is a specification for J2EE server, not a product; Java beans may be a
graphical component in IDE
What are the key features of the EJB technology?
• EJB components are server-side components written entirely in the Java
programming language
• EJB components contain business logic only - no system-level
programming & services, such as transactions, security, life-cycle,
threading, persistence, etc. are automatically managed for the EJB
component by the EJB server.
• EJB architecture is inherently transactional, distributed, portable multitier,
scalable and secure.
• EJB components are fully portable across any EJB server and any OS.
• EJB architecture is wire-protocol neutral--any protocol can be utilized like
IIOP,JRMP, HTTP, DCOM,etc.
What are the key benefits of the EJB technology?
EJB Interview Questions
http://capptitudebank.com 30/39
• Rapid application development
• Broad industry adoption
• Application portability
• Protection of IT investment
How many enterprise beans are there?
There are three kinds of enterprise beans:
• Session beans
• Entity beans
• Message-driven beans
What is message-driven bean?
A message-driven bean combines features of a session bean and a Java
Message Service (JMS) message listener, allowing a business component to receive
JMS. A message-driven bean enables asynchronous clients to access the business
logic in the EJB tier.
What is Entity Bean and Session Bean?
Entity Bean is a Java class which implements an Enterprise Bean interface and
provides the implementation of the business methods. There are two types:
Container Managed Persistence (CMP) and Bean-Managed Persistence (BMP).
Session Bean is used to represent a workflow on behalf of a client. There are two
types: Stateless and Stateful. Stateless bean is the simplest bean. It doesn't
maintain any conversational state with clients between method invocations. Stateful
bean maintains state between invocations.
How EJB Invocation happens?
Retrieve Home Object reference from Naming Service via JNDI. Return Home
Object reference to the client. Create me a new EJB Object through Home Object
interface. Create EJB Object from the Ejb Object. Return EJB Object reference to the
client. Invoke business method using EJB Object reference. Delegate request to Bean
(Enterprise Bean).
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?
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-byreference
can be used between EJBs Remote Interfaces, as they are remote
EJB Interview Questions
http://capptitudebank.com 31/39
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
EJBs 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.
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?
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 maintenance 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.
Can the primary key in the entity bean be a Java primitive type such as int?
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).
Can you control when passivation occurs?
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
EJB Interview Questions
http://capptitudebank.com 32/39
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).
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?
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.
What is EJB QL?
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
persistence and 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.
Write a brief description about local interfaces?
EJB was originally designed around remote invocation using the Java Remote
Method Invocation (RMI) mechanism, and later extended to support to standard
EJB Interview Questions
http://capptitudebank.com 33/39
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.
What are the special design cares that must be taken when you work with
local interfaces?
It 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-byreference.
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.
What happens if remove( ) is never invoked on a session bean?
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.
What is the difference between Message Driven Beans and Stateless Session
beans?
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
EJB Interview Questions
http://capptitudebank.com 34/39
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. 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
How can I call one EJB from inside of another EJB?
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.
What is an EJB Context?
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.
Is it possible for an EJB client to marshal an object of class java.lang.Class
to an EJB?
Technically yes, spec. compliant NO! - The enterprise bean must not attempt
to query a class to obtain information about the declared members that are not
otherwise accessible to the enterprise bean because of the security rules of the Java
language.
Is it legal to have static initializer blocks in EJB?
Although technically it is legal, static initializer blocks are used to execute
some piece of code before executing any constructor or method while instantiating a
class. Static initializer blocks are also typically used to initialize static fields - which
may be illegal in EJB if they are read/write - In EJB this can be achieved by including
the code in either the ejbCreate(), setSessionContext() or setEntityContext()
methods.
EJB Interview Questions
http://capptitudebank.com 35/39
Is it possible to stop the execution of a method before completion in a
SessionBean?
Stopping the execution of a method inside a Session Bean is not possible
without writing code inside the Session Bean. This is because you are not allowed to
access Threads inside an EJB.
What is the default transaction attribute for an EJB?
There is no default transaction attribute for an EJB. Section 11.5 of EJB v1.1
spec says that the deployer must specify a value for the transaction attribute for
those methods having container managed transaction. In WebLogic, the default
transaction attribute for EJB is SUPPORTS.
What is the difference between session and entity beans? When should I
use one or the other?
An entity bean represents persistent global data from the database; a session
bean represents transient user-specific data that will die when the user disconnects
(ends his session). Generally, the session beans implement business methods (e.g.
Bank.transferFunds) that call entity beans (e.g. Account.deposit, Account.withdraw)
Is there any default cache management system with Entity beans ?
In other words whether a cache of the data in database will be maintained in
EJB ? - Caching data from a database inside the AAApplication Server are what Entity
EJB’s are used for.The ejbLoad() and ejbStore() methods are used to synchronize the
Entity Bean state with the persistent storage(database). Transactions also play an
important role in this scenario. If data is removed from the database, via an external
application - your Entity Bean can still be alive the EJB container. When the
transaction commits, ejbStore() is called and the row will not be found, and the
transaction rolled back.
Why is ejbFindByPrimaryKey mandatory?
An Entity Bean represents persistent data that is stored outside of the EJB
Container/Server. The ejbFindByPrimaryKey is a method used to locate and load an
Entity Bean into the container, similar to a SELECT statement in SQL. By making this
method mandatory, the client programmer can be assured that if they have the
primary key of the Entity Bean, then they can retrieve the bean without having to
create a new bean each time - which would mean creating duplications of persistent
data and break the integrity of EJB.
Why do we have a remove method in both EJBHome and EJBObject?
EJB Interview Questions
http://capptitudebank.com 36/39
With the EJBHome version of the remove, you are able to delete an entity
bean without first instantiating it (you can provide a PrimaryKey object as a
parameter to the remove method). The home version only works for entity beans.
On the other hand, the Remote interface version works on an entity bean that you
have already instantiated. In addition, the remote version also works on session
beans (stateless and stateful) to inform the container of your loss of interest in this
bean.
How can I call one EJB from inside of another EJB?
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.
What is the difference between a Server, a Container, and a Connector?
An EJB server is an application, usually a product such as BEA WebLogic, that
provides (or should provide) for concurrent client connections and manages system
resources such as threads, processes, memory, database connections, network
connections, etc. An EJB container runs inside (or within) an EJB server, and
provides deployed EJB beans with transaction and security management, etc. The
EJB container insulates an EJB bean from the specifics of an underlying EJB server by
providing a simple, standard API between the EJB bean and its container. A
Connector provides the ability for any Enterprise Information System (EIS) to plug
into any EJB server which supports the Connector architecture. See Sun’s J2EE
Connectors for more in-depth information on Connectors.
How is persistence implemented in enterprise beans?
Persistence in EJB is taken care of in two ways, depending on how you
implement your beans: container managed persistence (CMP) or bean managed
persistence (BMP) For CMP, the EJB container which your beans run under takes care
of the persistence of the fields you have declared to be persisted with the database -
this declaration is in the deployment descriptor. So, anytime you modify a field in a
CMP bean, as soon as the method you have executed is finished, the new data is
persisted to the database by the container. For BMP, the EJB bean developer is
responsible for defining the persistence routines in the proper places in the bean, for
instance, the ejbCreate(), ejbStore(), ejbRemove() methods would be developed by
the bean developer to make calls to the database. The container is responsible, in
BMP, to call the appropriate method on the bean. So, if the bean is being looked up,
when the create() method is called on the Home interface, then the container is
EJB Interview Questions
http://capptitudebank.com 37/39
responsible for calling the ejbCreate() method in the bean, which should have
functionality inside for going to the database and looking up the data.
What is an EJB Context?
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.
Is method overloading allowed in EJB?
Yes you can overload methods
Should synchronization primitives be used on bean methods?
No. The EJB specification specifically states that the enterprise bean is not
allowed to use thread primitives. The container is responsible for managing
concurrent access to beans at runtime.
Are we allowed to change the transaction isolation property in middle of a
transaction?
No. You cannot change the transaction isolation level in the middle of
transaction.
For Entity Beans, What happens to an instance field not mapped to any
persistent storage, when the bean is passivated?
The specification infers that the container never serializes an instance of an
Entity bean (unlike stateful session beans). Thus passivation simply involves moving
the bean from the ready to the pooled bin. So what happens to the contents of an
instance variable is controlled by the programmer. Remember that when an entity
bean is passivated the instance gets logically disassociated from it’s remote object.
Be careful here, as the functionality of passivation/activation for Stateless Session,
Stateful Session and Entity beans is completely different. For entity beans the
ejbPassivate method notifies the entity bean that it is being disassociated with a
particular entity prior to reuse or for dereference.
What is a Message Driven Bean, what functions does a message driven bean
have and how do they work in collaboration with JMS?
Message driven beans are the latest addition to the family of component bean
types defined by the EJB specification. The original bean types include session beans,
which contain business logic and maintain a state associated with client sessions,
EJB Interview Questions
http://capptitudebank.com 38/39
and entity beans, which map objects to persistent data. Message driven beans will
provide asynchrony to EJB based applications by acting as JMS message consumers.
A message bean is associated with a JMS topic or queue and receives JMS messages
sent by EJB clients or other beans. Unlike entity beans and session beans, message
beans do not have home or remote interfaces. Instead, message driven beans are
instantiated by the container as required. Like stateless session beans, message
beans maintain no client-specific state, allowing the container to optimally manage a
pool of message-bean instances. Clients send JMS messages to message beans in
exactly the same manner as they would send messages to any other JMS
destination. This similarity is a fundamental design goal of the JMS capabilities of the
new specification. To receive JMS messages, message driven beans implement the
javax.jms.MessageListener interface, which defines a single onMessage() method.
When a message arrives, the container ensures that a message bean corresponding
to the message topic/queue exists (instantiating it if necessary), and calls its
onMessage method passing the client’s message as the single argument. The
message bean’s implementation of this method contains the business logic required
to process the message. Note that session beans and entity beans are not allowed to
function as message beans.
Does RMI-IIOP support code downloading for Java objects sent by value
across an IIOP connection in the same way as RMI does across a JRMP
connection?
Yes. The JDK 1.2 support the dynamic class loading. 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?
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.
EJB Interview Questions
http://capptitudebank.com 39/39
What is the advantage of putting an Entity Bean instance from the Ready
State to Pooled state?
The idea of the Pooled State is to allow a container to maintain a pool of
entity beans that has been created, but has not been yet synchronized or assigned to
an EJBObject. This mean that the instances do represent entity beans, but they can
be used only for serving Home methods (create or findBy), since those methods do
not relay on the specific values of the bean. All these instances are, in fact, exactly
the same, so, they do not have meaningful state. Jon Thorarinsson has also added:
It can be looked at it this way: If no client is using an entity bean of a particular type
there is no need for cachig it (the data is persisted in the database). Therefore, in
such cases, the container will, after some time, move the entity bean from the Ready
State to the Pooled state to save memory. Then, to save additional memory, the
container may begin moving entity beans from the Pooled State to the Does Not
Exist State, because even though the bean’s cache has been cleared, the bean still
takes up some memory just being in the Pooled State.

No comments:

Post a Comment