Enterprises Java Beans
Enterprises Java Beans
Enterprises Java Beans
(as it is with remote interfaces). remote interfaces pass parameters by value, while
local interfaces pass them by reference.
24) Can a bean be defined both as a Local and a Remote?
Yes.
25) What are ejbHome methods or Home Business Methods?
EJB 2.0 allows entity beans to declare ejbHome methods in the home interface.
These methods perform operations that are not specific to a particular bean
instance.
26) What is a transaction?
A transaction is a sequence of operations that must all complete successfully, or
leave system in the state it had been before the transaction started.
27) What do mean by ACID properties of a transaction?
ACID is the acronym for the four properties guaranteed by transactions:
atomicity, consistency, isolation, and durability.
28) Where will you mention whether the transaction is container managed or
bean managed?
Transaction management is specified in the deployment descriptor(ejb-jar.xml)
using <transaction-type> tag.
29) What are container managed transactions?
In an enterprise bean with container-managed transactions, the EJB container sets
the boundaries of the transactions. You can use container-managed transactions
with any type of enterprise bean: session, entity, or message-driven. Containermanaged transactions simplify development because the enterprise bean code
does not explicitly mark the transaction's boundaries. The code does not include
statements that begin and end the transaction.
30) What methods are restricted being called inside a method decalred as
container managed?
We should not invoke any method that might interfere with the transaction
boundaries set by the container. The list of restricted methods are as follows:
1) The commit, setAutoCommit, and rollback methods of java.sql.Connection
2) The getUserTransaction method of javax.ejb.EJBContext
3) Any method of javax.transaction.UserTransaction
31) What are bean managed transactions?
For bean-managed transactions, the bean specifies transaction demarcations using
methods in the javax.transaction.UserTransaction interface. Bean-managed
transactions include any stateful or stateless session beans with a transaction-type
set to Bean. Entity beans cannot use bean-managed transactions.
For stateless session beans, the entering and exiting transaction contexts must
match. For stateful session beans, the entering and exiting transaction contexts
may or may not match. If they do not match, EJB container maintains associations
between the bean and the nonterminated transaction.
Session beans with bean-managed transactions cannot use the setRollbackOnly
and getRollbackOnly methods of the javax.ejb.EJBContext interface.
32) What is the difference between container managed and bean managed
transaction?
In container-managed transaction, the transaction boundaries are defined by the
container while in bean managed transaction, the transaction boundaries are
defined by the bean. Entity Beans transactions are always container managed.
32) Why entity bean's transaction can't be managed by the bean?
Entity bean's represent the data and responsible for the integrity of the data.
Entity bean's doesn't represent business operations to manage transactions. So
there is no requirement for an entity bean managing it's transaction.
33) How many types of transaction attributes are available in EJB and what
are they?
There 6 types of Transaction Atributes defined in EJB. They are as follows:
1. NotSupported : If the method is called within a transaction, this transaction is
suspended during the time of the method execution.
2. Required : If the method is called within a transaction, the method is executed
in the scope of this transaction; otherwise, a new transaction is started for the
execution of the method and committed before the method result is sent to the
caller.
3. RequiresNew : The method will always be executed within the scope of a new
transaction. The new transaction is started for the execution of the method, and
committed before the method result is sent to the caller. If the method is called
within a transaction, this transaction is suspended before the new one is started
and resumed when the new transaction has completed.
4. Mandatory: The method should always be called within the scope of a
transaction, else the container will throw the TransactionRequired exception.
5. Supports : The method is invoked within the caller transaction scope; if the
caller does not have an associated transaction, the method is invoked without a
transaction scope.
6. Never : The client is required to call the bean without any transaction context;
if it is not the case, a java.rmi.RemoteException is thrown by the container.
34) How many types of Isolation Level's are available in EJB and what are
they?
35) 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.
36) Are enterprise beans allowed to use Thread.sleep()?
Enterprise beans are restricted from invoking multithreading thread functionality.
37) Can a bean be attached to more than one JNDI name?
Yes. A same bean can be deployed multiple times in the same server with
different JNDI names.
38) Can a client program directly access an Enterprise bean?
No. EJB Clients never access an EJB directly. The container insulates the beans
from direct access from client applications. Every time a bean is requested,
created, or deleted, the container manages the whole process.
39) When is an application said to be distributed?
An application is distributed when its components are running in separate
runtime environments(JVM's), usually on different platforms connected via a
network.
Distributed applications are usually of 3 types. They are :
1. two tier (client and a server)
2.three tier (client and a middleware and a server)
3. multitier (client and multiple middleware and multiple servers).
40) What is an EAR file?
EAR is Enterprise Archive file. A archive file that contains a J2EE application.
41) What do mean by business method?
A method of an enterprise bean that implements the business logic or rules of an
application.
42) What is a finder method?
A method defined in the home interface and invoked by a client to locate an
entity bean.
Q:
What are the different kinds of enterprise beans?
A: Different kind of enterrise beans are Stateless session bean, Stateful session bean,
Entity bean, Message-driven bean...........
Q:
What is Session Bean?
A: A session bean is a non-persistent object that implements some business logic
running on the server. One way to think of a session object...........
Q:
What is Entity Bean?
A: The entity bean is used to represent data in the database. It provides an objectoriented interface to ...........
Q:
What are the methods of Entity Bean?
A: An entity bean consists of 4 groups of methods, create methods...........
Q:
What is the difference between Container-Managed Persistent (CMP)
bean and Bean-Managed Persistent(BMP) ?
A: Container-managed persistence (CMP) and bean-managed persistence (BMP).
With CMP, the container manages the persistence of the entity bean............
Q:
What are the callback methods in Entity beans?
A: Callback methods allows the container to notify the bean of events in
its life cycle. The callback methods are defined in the javax.ejb.EntityBean
interface............
Q:
What is software architecture of EJB?
A: Session and Entity EJBs consist of 4 and 5 parts respectively, a remote
interface...........
Q:
Can Entity Beans have no create() methods?
A: Yes. In some cases the data is inserted NOT using Java application,...........
Q:
What is bean managed transaction?
A: If a developer doesn't want a Container to manage transactions, it's possible to
implement all database operations manually...........
Q:
What are transaction attributes?
A: The transaction attribute specifies how the Container must manage transactions
for a method when a client invokes the method via the enterprise beans home
or...........
Q:
What are transaction isolation levels in EJB?
A: Transaction_read_uncommitted
,
Transaction_read_committed
Transaction_repeatable_read...........
Q:
How EJB Invocation happens?
A: Step 1: Retrieve Home Object reference from Naming Service via JNDI.
step 2: Return Home Object reference to the client.
step 3: Create me a new EJB Object through Home Object interface.
step 4: Create EJB Object from the Ejb Object
step 5: Return EJB Object reference to the client.
step 6: Invoke business method using EJB Object reference.
step 7: Delegate request to Bean (Enterprise Bean).
Q:
Is it possible to share an HttpSession between a JSP and EJB? What
happens when I change a value in the HttpSession from inside an EJB?
A: You can pass the HttpSession as parameter to an EJB method, only if all objects
in session are serializable.This has to be consider as ?passed-by-value", that
means that it?s 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.
Q:
The EJB container implements the EJBHome and EJBObject classes. For
every request from a unique client, does the container create a separate
instance of the generated EJBHome and EJBObject classes?
A: The EJB container maintains an instance pool. The container uses these instances
for the EJB Home reference irrespective of the client request. while refering the
EJB Object classes the container creates a separate instance for each client
request. The instance pool maintainence is up to the implementation of the
container. If the container provides one, it is available otherwise it is not
mandatory for the provider to implement it. Having said that, yes most of the
container providers implement the pooling functionality to increase the
performance of the application server. The way it is implemented is again up to the
implementer.
Q:
A:
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)
Q:
Can you control when passivation occurs?
A: The developer, according to the specification, cannot directly control when
passivation occurs. Although for Stateful Session Beans, the container cannot
passivate an instance that is inside a transaction. So using transactions can be a a
strategy to control passivation.
The ejbPassivate() method is called during passivation, so the developer has
control over what to do during this exercise and can implement the require
optimized logic.
Some EJB containers, such as BEA WebLogic, provide the ability to tune the
container to minimize passivation calls.
Taken from the WebLogic 6.0 DTD -"The passivation-strategy can be either
"default" or "transaction". With the default setting the container will attempt to
keep a working set of beans in the cache. With the "transaction" setting, the
container will passivate the bean after every transaction (or method call for a nontransactional invocation).
Q:
What is the advantage of using Entity bean for database operations, over
directly using JDBC API to do database operations? When would I use one
over the other?
A: Entity Beans actually represents the data in a database. It is not that Entity Beans
replaces JDBC API. There are two types of Entity Beans Container Managed and
Bean Mananged. In Container Managed Entity Bean - Whenever the instance of
the bean is created the container automatically retrieves the data from the
DB/Persistance storage and assigns to the object variables in bean for user to
manipulate or use them. For this the developer needs to map the fields in the
database to the variables in deployment descriptor files (which varies for each
vendor).
In the Bean Managed Entity Bean - The developer has to specifically make
connection, retrive values, assign them to the objects in the ejbLoad() which will
be called by the container when it instatiates a bean object. Similarly in the
ejbStore() the container saves the object values back the the persistance storage.
ejbLoad and ejbStore are callback methods and can be only invoked by the
container. Apart from this, when you use Entity beans you dont need to worry
about database transaction handling, database connection pooling etc. which are
taken care by the ejb container. But in case of JDBC you have to explicitly do the
above features. what suresh told is exactly perfect. ofcourse, this comes under the
database transations, but i want to add this. the great thing about the entity
beans of container managed, whenever the connection is failed during the
transaction processing, the database consistancy is mantained automatically. the
container writes the data stored at persistant storage of the entity beans to the
database again to provide the database consistancy. where as in jdbc api, we,
developers has to do manually.
Q:
A:
Q:
Brief description about local interfaces?
A: EEJB was originally designed around remote invocation using the Java Remote
Method Invocation (RMI) mechanism, and later extended to support to standard
CORBA transport for these calls using RMI/IIOP. This design allowed for maximum
flexibility in developing applications without consideration for the deployment
scenario, and was a strong feature in support of a goal of component reuse in
J2EE.
Many developers are using EJBs locally -- that is, some or all of their EJB calls are
between beans in a single container.
With this feedback in mind, the EJB 2.0 expert group has created a local interface
mechanism. The local interface may be defined for a bean during development, to
allow streamlined calls to the bean if a caller is in the same container. This does
not involve the overhead involved with RMI like marshalling etc. This facility will
thus improve the performance of applications in which co-location is planned.
Local interfaces also provide the foundation for container-managed relationships
among entity beans with container-managed persistence.
Q:
What are the special design care that must be taken when you work with
local interfaces?
A: EIt is important to understand that the calling semantics of local interfaces are
different from those of remote interfaces. For example, remote interfaces pass
parameters using call-by-value semantics, while local interfaces use call-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 longterm costs of these choices, especially when changing requirements and
component reuse are taken into account, need to be factored into the design
10
decision.
Q:
What happens if remove( ) is never invoked on a session bean?
A: In case of a stateless session bean it may not matter if we call or not as in both
cases nothing is done. The number of beans in cache is managed by the container.
In case of stateful session bean, the bean may be kept in cache till either the
session times out, in which case the bean is removed or when there is a
requirement for memory in which case the data is cached and the bean is sent to
free pool.
11
Q:
What is the difference between Message Driven Beans and Stateless
Session beans?
A: In several ways, the dynamic creation and allocation of message-driven bean
instances mimics the behavior of stateless session EJB instances, which exist only
for the duration of a particular method call. However, message-driven beans are
different from stateless session EJBs (and other types of EJBs) in several
significant
ways:
Message-driven beans process multiple JMS messages asynchronously, rather than
processing a serialized sequence of method calls.
Message-driven beans have no home or remote interface, and therefore cannot be
directly accessed by internal or external clients. Clients interact with messagedriven 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.
Q:
How can I call one EJB from inside of another EJB?
A:
EJBs can be clients of other EJBs. It just works. Use JNDI to locate the Home
Interface of the other bean, then acquire an instance reference, and so forth.
Q:
A:
Q:
The EJB container implements the EJBHome and EJBObject classes. For
every request from a unique client, does the container create a separate
instance of the generated EJBHome and EJBObject classes?
A:
The EJB container maintains an instance pool. The container uses these instances
for the EJB Home reference irrespective of the client request. While refering the
EJB Object classes the container creates a separate instance for each client
request. The instance pool maintainence is up to the implementation of the
container. If the container provides one, it is available otherwise it is not
mandatory for the provider to implement it. Having said that, yes most of the
container providers implement the pooling functionality to increase the
12
13