Hi all,
I have a questions about home or component interface references in clustered
JBoss, about how they are saved, replicated and managed. They always say "try
it" so I wrote a small example to illustrate my point. Basically my question is
about how and why home, component and local home references work in clustered
JBoss. I would very much appreciate an expert opinion. Below is my example.
Many thanks to you all in advance.
I run JBoss 4.0.5 as a cluster (I put apache with mod_jk) on two boxes, say
box1, box2 which makes two nodes: node1, node2 respectively and I use farming
to deploy my ejbs. So I put myEjb.jar into farm on node1 and it get distributed
to node2
I enabled a NON-sticky approach (just a test to illustrate my question and be
able later on to go to another server that does not support sticky) so requests
go a box1/box2/box1.... in a round-robin manner.
The call is like this JSP -> servlet -> SFSB. I am testing this Stateful
Session Bean (let's call it AddressManagerHome). It is a facade for two other
stateful beans (it is just a test to illustrate my question). Servlet gets
reference to component interface of the bean and stores it into the request.
For this particular test my SFSB has 3 instance variables (here they are just
to make things clear)
protected AddressHome addressHome = null; (reference to home interface)
protected Address address = null; (reference to component interface)
protected WorkAddressLocalHome workAddressHome = null; (reference to local
home interface)
they are all initialized in ejbCreate of the bean. So I create bean in the
servlet like this
public class AddressManagerServlet extends HttpServlet {
....
AddressManagerHome home = (AddressManagerHome)
ServiceLocator.getInstance().getRemoteHome(.....);
AddressManager bean = home.create();
bean.testAll()
....
where testAll() does 3 things:
1. for home reference (addressHome) it creates component interface and calls
method :
Address bean = addressHome.create();
bean.test();
2. for component reference (address) it just calls method :
address.test();
3. for local home interface it creates home component reference and calls
method :
WorkAddressLocal bean = workAddressHome.create();
bean.test();
Now, the 1st request goes to node1 and everything works fine. Then 2nd request
(same session, I use encodeURL) goes to node2 and everything is fine again.
WHY????
I understand why case N1 is fine, we just have reference to remote home so no
problem there but why in case N2 it is fine? If we created ejbObject on node1
and then call it from node2? How is node2 even aware of address bean being
created earlier in node1?? Shouldn't it say I have no idea, create reference to
component interface again?
And why is case N3 is fine? It is a reference to local to home. Which is by
definition local to VM ! So if WorkAddressLocalHome is created in node1 then
node2 should have no idea what it is. So how does exactly clustering in JBoss
work?
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4063782#4063782
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4063782
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user