You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by "Paul Gribben (JIRA)" <ji...@apache.org> on 2008/01/21 12:47:34 UTC

[jira] Created: (JCR-1333) jackrabbit-jcr-rmi: Supplied javax.transaction.xa.Xid is assumed serializable, but is not on some environments.

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.


[jira] Resolved: (JCR-1333) jackrabbit-jcr-rmi: Supplied javax.transaction.xa.Xid is assumed serializable, but is not on some environments.

Posted by "Jukka Zitting (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/JCR-1333?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jukka Zitting resolved JCR-1333.
--------------------------------

    Resolution: Fixed

Added the SerializableXid class and related XAResource changes in revision 628289.

I just hope there are no resource managers that expect to be able to cast the Xid objects to some implementation-specific classes...

> 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.


[jira] Updated: (JCR-1333) jackrabbit-jcr-rmi: Supplied javax.transaction.xa.Xid is assumed serializable, but is not on some environments.

Posted by "Jukka Zitting (JIRA)" <ji...@apache.org>.
     [ 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.