jackrabbit-jcr-rmi: Supplied javax.transaction.xa.Xid is assumed serializable, but is not on some environments. ---------------------------------------------------------------------------------------------------------------
Key: JCR-1333 URL: https://issues.apache.org/jira/browse/JCR-1333 Project: Jackrabbit Issue Type: Bug Affects Versions: 1.4 Environment: Linux (suse9) with websphere 6.1 invoking jackrabbit client RMI Reporter: Paul Gribben Websphere provides a non-serializable javax.transaction.xa.Xid implementation, causing ClientXAResource to fail with NotSerializableException when passing Xid over RMI. I have worked around this by converting the supplied Xid to a local serializable Xid implementation that takes the supplied Xid parameters, and implements hashCode() and equals() correctly: private static class SerializableXID implements javax.transaction.xa.Xid, Serializable { /** * Serial version ID */ private static final long serialVersionUID = -1390620315181450507L; private final byte[] branchQualifier; private final byte[] globalTransactionId; private final int formatId; private final int hashCode; public SerializableXID(Xid xid) { branchQualifier = xid.getBranchQualifier(); globalTransactionId = xid.getGlobalTransactionId(); formatId = xid.getFormatId(); hashCode = xid.hashCode(); } public byte[] getBranchQualifier() { return branchQualifier; } public int getFormatId() { return formatId; } public byte[] getGlobalTransactionId() { return globalTransactionId; } public final int hashCode() { return hashCode; } public final boolean equals(Object obj) { if(obj == this) { return true; } if(!(obj instanceof Xid)) { return false; } Xid xidimpl = (Xid)obj; if(formatId != xidimpl.getFormatId()) { return false; } else { return Arrays.equals(branchQualifier, xidimpl.getBranchQualifier()) && Arrays.equals(globalTransactionId, xidimpl.getGlobalTransactionId()); } } } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.