public boolean routePacket(byte[] nodeID, JID recipient, Packet packet) {
        // Send the packet to the specified node and let the remote node deliver the packet to the recipient
        try {
            CacheFactory.doClusterTask(new RemotePacketExecution(recipient, packet), nodeID);
            return true;
        } catch (IllegalStateException  e) {
            logger.warn("Error while routing packet to remote node: " + e);
            return false;
        }
    }
Route packets to other nodes of the cluster. If the remote node was not found or failed
to be reached then depending on the type of packet an error packet will be returned. In case
the remote node is reached but the remote node fails to route the packet to the recipient (e.g.
the recipient just left) then an error packet may be created from the remote node and send it
back to this node.<p>

@author Gaston Dombiak
xmppserver/src/main/java/org/jivesoftware/openfire/cluster/ClusterPacketRouter.java