I have a small problem with Redelivering messages.
I am using jboss 4.0.5.
I have looked at bug EJBTHREE-783 and backported the changes from 4.2.1ga to the 4.0.5 branch.
However, when looking at the code, I came across the following part, in org.jboss.ejb.plugins.inflow.JBossMessageEndpointFactory:
public boolean isDeliveryTransacted(Method method) throws NoSuchMethodException
{
boolean result = false;
int transType = metaData.getMethodTransactionType(method.getName(), method.getParameterTypes(), InvocationType.LOCAL);
if (transType == MetaData.TX_REQUIRED)
result = true;
if (trace)
log.trace("isDeliveryTransacted " + container.getBeanMetaData().getContainerObjectNameJndiName() + " method=" + method + " result=" + result);
return result;
}
I am a bit surprised by this method. What about TX_MANDATORY, TX_REQUIRES_NEW, and TX_SUPPORT?
I guess that the delivery is transacted if we are using any of these states.
Currently messages do not get rollback and requeued if the transaction type is other than REQUIRED. I don't think that's correct. They should be requeued as well for other transaction types.
What there a logic behind this? I may I reopen EJBTHREE-783?
Thanks,
Nicolas Leroux