jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jukka Zitting (JIRA)" <j...@apache.org>
Subject [jira] Updated: (JCR-1333) jackrabbit-jcr-rmi: Supplied javax.transaction.xa.Xid is assumed serializable, but is not on some environments.
Date Sat, 16 Feb 2008 13:19:10 GMT

     [ https://issues.apache.org/jira/browse/JCR-1333?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Jukka Zitting updated JCR-1333:
-------------------------------

      Component/s: jackrabbit-jcr-rmi
    Fix Version/s: 1.5
         Assignee: Jukka Zitting

> 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
>          Components: jackrabbit-jcr-rmi
>    Affects Versions: 1.4
>         Environment: Linux (suse9) with websphere 6.1 invoking jackrabbit client RMI
>            Reporter: Paul Gribben
>            Assignee: Jukka Zitting
>             Fix For: 1.5
>
>
> 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.


Mime
View raw message