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.