/* if(!localTxn)
{
capabilities.add(TxnCapabilities.LOCAL_TXN);
}*/
final ReceivingLinkEndpoint receivingLinkEndpoint = (ReceivingLinkEndpoint) endpoint;
final TxnCoordinatorLink_1_0 coordinatorLink =
new TxnCoordinatorLink_1_0(getVirtualHost(), this, receivingLinkEndpoint, _openTransactions);
receivingLinkEndpoint.setLinkEventListener(new SubjectSpecificReceivingLinkListener(coordinatorLink));
link = coordinatorLink;
}
else
{
ReceivingLink_1_0 previousLink =
(ReceivingLink_1_0) linkRegistry.getDurableReceivingLink(endpoint.getName());
if(previousLink == null)
{
Target target = (Target) endpoint.getTarget();
if(target != null)
{
if(Boolean.TRUE.equals(target.getDynamic()))
{
AMQQueue tempQueue = createTemporaryQueue(target.getDynamicNodeProperties());
target.setAddress(tempQueue.getName());
}
String addr = target.getAddress();
if(!addr.startsWith("/") && addr.contains("/"))
{
String[] parts = addr.split("/",2);
ExchangeImpl exchange = getVirtualHost().getExchange(parts[0]);
if(exchange != null)
{
ExchangeDestination exchangeDestination =
new ExchangeDestination(exchange,
target.getDurable(),
target.getExpiryPolicy());
exchangeDestination.setInitialRoutingAddress(parts[1]);
destination = exchangeDestination;
}
else
{
endpoint.setTarget(null);
destination = null;
}
}
else
{
MessageDestination messageDestination = getVirtualHost().getMessageDestination(addr);
if(messageDestination != null)
{
destination = new NodeReceivingDestination(messageDestination, target.getDurable(),
target.getExpiryPolicy());
}
else
{
AMQQueue queue = getVirtualHost().getQueue(addr);
if(queue != null)
{
destination = new QueueDestination(queue);
}
else
{
endpoint.setTarget(null);
destination = null;
}
}
}
}
else
{
destination = null;
}
if(destination != null)
{
final ReceivingLinkEndpoint receivingLinkEndpoint = (ReceivingLinkEndpoint) endpoint;
final ReceivingLink_1_0 receivingLink = new ReceivingLink_1_0(new ReceivingLinkAttachment(this, receivingLinkEndpoint),
getVirtualHost(),
(ReceivingDestination) destination);
receivingLinkEndpoint.setLinkEventListener(new SubjectSpecificReceivingLinkListener(receivingLink));
link = receivingLink;
if(TerminusDurability.UNSETTLED_STATE.equals(target.getDurable()))
{
linkRegistry.registerReceivingLink(endpoint.getName(), receivingLink);
}
}
}
else
{
ReceivingLinkEndpoint receivingLinkEndpoint = (ReceivingLinkEndpoint) endpoint;
previousLink.setLinkAttachment(new ReceivingLinkAttachment(this, receivingLinkEndpoint));
receivingLinkEndpoint.setLinkEventListener(previousLink);
link = previousLink;
endpoint.setLocalUnsettled(previousLink.getUnsettledOutcomeMap());
}
}