|
|
|
|
EJB Questions Part - 4
46. Why are ejbActivate() and ejbPassivate() included for stateless
session bean even though they are never required as it is a no conversational
bean?
To have a consistent interface, so that there is no different
interface that you need to implement for Stateful Session Bean and Stateless
Session Bean. Both Stateless and Stateful Session Bean implement
javax.ejb.SessionBean and this would not be possible if stateless session bean
is to remove ejbActivate and ejbPassivate from the interface.
47. Static variables in EJB should not be relied upon as they may break in
clusters. Why?
Static variables are only ok if they are final. If they are not final, they
will break the cluster. What that means is that if you cluster your
application server (spread it across several machines) each part of the
cluster will run in its own JVM.
Say a method on the EJB is invoked on cluster 1 (we will have two clusters - 1
and 2) that causes value of the static variable to be increased to 101. On the
subsequent call to the same EJB from the same client, a cluster 2 may be
invoked to handle the request. A value of the static variable in cluster 2 is
still 100 because it was not increased yet and therefore your application
ceases to be consistent. Therefore, static non-final variables are strongly
discouraged in EJBs.
48. If I throw a custom ApplicationException from a business method in
Entity bean which is participating in a transaction, would the transaction be
rolled back by container?
EJB Transaction is automatically rolled back only when a SystemException (or a
subtype of it) is thrown. Your ApplicationException can extend from
javax.ejb.EJBException, which is a sub class of RuntimeException. When an
EJBException is encountered the container rolls back the transaction. EJB
Specification does not mention anything about Application exceptions being
sub-classes of EJBException. You can tell container to rollback the
transaction, by using setRollBackOnly on SessionContext/EJBContext object as
per type of bean you are using.
49. Does Stateful Session bean support instance pooling?
Stateful Session Bean conceptually doesn't have instance pooling.
50. Can I map more than one table in a CMP?
No, you cannot map more than one table to a single CMP Entity Bean. CMP has
been, in fact, designed to map a single table.
51. 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.
52. 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)
53. How to implement an entity bean which the PrimaryKey is an auto numeric
field?
The EJB 2 Spec (10.8.3 - Special case: Unknown primary key class) says
that in cases where the Primary Keys are generated automatically by the
underlying database, the bean provider must declare the findByPrimaryKey
method to return java.lang.Object and specify the Primary Key Class as
java.lang.Object in the Deployment Descriptor.
54. When defining the Primary Key for the Enterprise Bean, the Deployer
using the Container Provider's tools will typically add additional
container-managed fields to the concrete subclass of the entity bean class.
In this case, the Container must generate the Primary Key value when the
entity bean instance is created (and before ejbPostCreate is invoked on the
instance.)
55. What is clustering?
Clustering is grouping machines together to transparently provide enterprise
services. Clustering is an essential piece to solving the needs for today's
large websites.
The client does not know the difference between approaching one server and
approaching a cluster of servers.
56. 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. 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.
57. If my session bean with single method insert record into 2 entity
beans, how can know that the process is done in same transaction (the
attributes for these beans are Required)?
If your session bean is using bean-managed transactions, you can ensure that
the calls are handled in the same transaction by :
javax.transaction.UserTransaction tran= null;
try{
tran=ctx.getUserTransaction();
tran.begin();
myBeanHome1.create(....);
myBeanHome2.create(...);
tran.commit();
}catch(...){}
You may want to check if you're already running in a transaction by calling
tran.getStatus().
58. When should I adopt BMP and when I should use CMP?
You can use CMP and BMP beans in the same application... obviously, a bean can
be BMP or CMP, not both at the same time (they are mutually exclusive).
There is a common approach that is normally used and considered a good one.
You should start developing CMP beans, unless you require some kind of special
bean, like multi-tables, that cannot be completely realized with a single
bean. Then, when you realize that you need something more or that you would
prefer handling the persistence (performance issue are the most common
reason), you can change the bean from a CMP to a BMP.
|
|
|
Bookmark This Page :
|
|
|
|
|
|
|
|
|
|
|
|
java6 ejb3 jsf hibernate eclipse ajax groovy spring seam java struts webservice j2me guice java5 jca tapestry soa linux ria |
|