1. What is EJB?
EJB stands for Enterprise JavaBeans and is 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.
2. 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.
3. 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.
4. 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.
5. What are the key features of the EJB technology?
1. EJB components are server-side components written entirely in the Java
programming language
2. 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.
3. EJB architecture is inherently transactional, distributed, portable
multi-tier, scalable and secure.
4. EJB components are fully portable across any EJB server and any OS.
5. EJB architecture is wire-protocol neutral--any protocol can be utilized
like IIOP, JRMP, HTTP, DCOM, etc.
6. What are the key benefits of the EJB technology?
1. Rapid application development
2. Broad industry adoption
3. Application portability
4. Protection of IT investment
7. How many enterprise beans?
There are three kinds of enterprise beans:
1. session beans,
2. entity beans, and
3. message-driven beans.
8. 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.
9. What are 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.
10. 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).
11. 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 considering as
passed-by-value that means that it’s read-only in the EJB. If anything is
altered from inside the EJB, it won’t be reflected back to the HttpSession of
the Servlet Container. The pass-by-reference can be used between EJBs Remote
Interfaces, as they are remote references. While it is possible to pass an
HttpSession as a parameter to an EJB object, it is considered to be bad
practice in terms of object-oriented design. This is because you are creating
an unnecessary coupling between back-end objects (EJBs) and front-end objects
(HttpSession). Create a higher-level of abstraction for your 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.
12. 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
referring 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.
13. 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).
14. 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 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).
15. 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 Managed. In Container Managed Entity Bean - Whenever the instance of
the bean is created the container automatically retrieves the data from the
DB/Persistence 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, retrieve values, assign them to the objects in
the ejbLoad() which will be called by the container when it instantiates a
bean object. Similarly in the ejbStore() the container saves the object values
back the persistence storage. ejbLoad and ejbStore are callback methods and
can be only invoked by the container. Apart from this, when you use Entity
beans you don’t need to worry about database transaction handling, database
connection pooling etc. which are taken care by the ejb container.