[Design of Clustering on JBoss] - Transaction Stickiness in heterogeneous/homogeneous deployme
by galder.zamarreno@jboss.com
I was thinking and running some further error situation tests with regards to transaction stickiness and I came to the conclusion that transaction stickiness only makes sense in a homogeneous deployment scenario, not in a heterogeneous one.
When ut.begin() is called, wherever it lands, all the EJBs that are gonna be called until commit/rollback need to be in that node, otherwise the transaction fails (no failover allowed within a transaction). At ut.begin(), we can't know that "X node has all the EJBs that I'm gonna need for this transaction". So, I think this is a sensible assumption, what do you think?
For example, the following sounds reasonable to me:
- EJB1 and EJB2 deployed in nodes A and B.
- User transaction sticky started that calls EJB1 and EJB2 continuously and the stickyness landed in node A.
- During this transaction, EJB1 and EJB2 are undeployed from node A which results of transaction failure.
- UserTransaction is looked up again (HA-JNDI) and new transaction began. Assuming that node B replied to the lookup, everything is fine, EJB1 and EJB2 are deployed there.
- After commit(), you call begin() again which is now load balanced to node A but EJB1 and EJB2 are not deployed there so it fails. I think this is reasonable failure because EJB1 and EJB2 are longer in node A and at begin(), we can't know whether all or any of the EJBs we're gonna call are in that node.
Thoughts?
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4182887#4182887
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4182887
16 years, 2 months
[Design of JBoss Remoting, Unified Invokers] - Re: Exception propagation using HTTP servlet transport on 1.
by DGuralnik
<!-- Unified invoker (based on remoting) for invocations via HTTP with target EJB3 beans -->
| <mbean code="org.jboss.remoting.transport.Connector"
| name="jboss.remoting:service=connector,transport=servlet,target=ejb3"
| display-name="EJB3 Servlet transport Connector">
| <depends>jboss.aop:service=AspectDeployer</depends>
| <attribute name="Configuration">
| <config>
| <invoker transport="servlet">
| <attribute name="dataType" isParam="true">invocation</attribute>
| <attribute name="timeout" isParam="true">600000</attribute>
| <attribute name="marshaller" isParam="true">org.jboss.invocation.unified.marshall.InvocationMarshaller</attribute>
| <attribute name="unmarshaller" isParam="true">org.jboss.invocation.unified.marshall.InvocationUnMarshaller</attribute>
| <attribute name="serverBindAddress">${jboss.bind.address}</attribute>
| <attribute name="serverBindPort">8080</attribute>
| <attribute name="path">unified-invoker/restricted/Ejb3ServerInvokerServlet</attribute>
| <attribute name="noThrowOnError" isParam="true">true</attribute>
| <attribute name="return-exception" isParam="true">true</attribute>
| </invoker>
| <handlers>
| <handler subsystem="AOP">org.jboss.aspects.remoting.AOPRemotingInvocationHandler</handler>
| </handlers>
| </config>
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4182875#4182875
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4182875
16 years, 2 months
[Design of Messaging on JBoss (Messaging/JBoss)] - Re: new QueueBrowser implementation
by timfox
"ataylor" wrote : anonymous wrote : 1) Why are the methods stop, start, restart, and the extra logic around "messagesWaiting", and the extra server consumer start and stop necessary in the ClientBrowserImpl?
|
| This to stop delivery of messages and wait for any in transit messages are received before restarting with a new iterator.
|
Why do you need to do that?
anonymous wrote :
| messagesWaiting is so we can figure out if any messages are left to browse.
|
Can't you use the current receiveImmediate() method to do that?
anonymous wrote :
| anonymous wrote : A simpler solution would have been to take the copied Set of refs from the queue.list() method, and then instantiate a QueueImpl instance on the fly and just have the consumer consume from that, or create a simple class that just iterates the set and get it to call the handle() method of ServerConsumer, then you wouldn't need to duplicate the code.
|
| Ok, I can do it this way if you prefer.
Well, I hope you agree it's simpler and avoids code duplication too ;)
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4182848#4182848
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4182848
16 years, 2 months