-
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? -
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.
-
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), and 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.
-
Question With regard to Entity
Beans, 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 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.
-
Question 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’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 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 or to select entity objects
that are related to the entity bean
on which the query is defined.