Re: [POOL2] Pooling mutable objects
I'd think adding a UUID then overriding equals and hashCode would do the trick. To aid you in doing this, commons-lang has EqualsBuilder [1] and HashCodeBuilder [2], I highly recommend using them. Bill- [1] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/EqualsBuilder.html [2] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/HashCodeBuilder.html On Fri, Feb 6, 2015 at 9:00 AM, Michael Osipov 1983-01...@gmx.net wrote: Hi folks, I am developing a session pool for an HTTP backend which is requested with the fabulous HttpClient. The session object is this: public class RawSession { private CookieStore cookieStore; private String logId; private MutableInt requestId; private String clientId; private String serverId; } There won't be any setters but as you see, the cookie store and mutable int might change. Additionally, I did not implement any custom equals and hashCode methods. I have searched the docs and the found and did not find any clear answer which says that pooled objects have to be immutable. Though, I have found POOL-283 and POOL-284 which led me to the conclusion that this is a problem because the objects are stored in a map which relies on equals and hashCode. Does this ultimately mean that I have to override equals and hashCode and provide some internal, immutable value something like a UUID? Alternatively, I could retrieve the JSESSIONID from the cookie store and use this as a unique value. Thanks, Michael - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org
Re: Re: [POOL2] Pooling mutable objects
This is what I did: this.internalId = RandomStringUtils.randomAlphanumeric(8); Some Eclipse magic: @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((internalId == null) ? 0 : internalId.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; RawSession other = (RawSession) obj; if (internalId == null) { if (other.internalId != null) return false; } else if (!internalId.equals(other.internalId)) return false; return true; } Gesendet: Freitag, 06. Februar 2015 um 16:47 Uhr Von: James Carman ja...@carmanconsulting.com An: Commons Users List user@commons.apache.org Betreff: Re: [POOL2] Pooling mutable objects Or just let your IDE generate the methods. On Fri, Feb 6, 2015 at 9:05 AM, William Speirs wspe...@apache.org wrote: I'd think adding a UUID then overriding equals and hashCode would do the trick. To aid you in doing this, commons-lang has EqualsBuilder [1] and HashCodeBuilder [2], I highly recommend using them. Bill- [1] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/EqualsBuilder.html [2] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/HashCodeBuilder.html On Fri, Feb 6, 2015 at 9:00 AM, Michael Osipov 1983-01...@gmx.net wrote: Hi folks, I am developing a session pool for an HTTP backend which is requested with the fabulous HttpClient. The session object is this: public class RawSession { private CookieStore cookieStore; private String logId; private MutableInt requestId; private String clientId; private String serverId; } There won't be any setters but as you see, the cookie store and mutable int might change. Additionally, I did not implement any custom equals and hashCode methods. I have searched the docs and the found and did not find any clear answer which says that pooled objects have to be immutable. Though, I have found POOL-283 and POOL-284 which led me to the conclusion that this is a problem because the objects are stored in a map which relies on equals and hashCode. Does this ultimately mean that I have to override equals and hashCode and provide some internal, immutable value something like a UUID? Alternatively, I could retrieve the JSESSIONID from the cookie store and use this as a unique value. Thanks, Michael - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org
Re: [POOL2] Pooling mutable objects
Or just let your IDE generate the methods. On Fri, Feb 6, 2015 at 9:05 AM, William Speirs wspe...@apache.org wrote: I'd think adding a UUID then overriding equals and hashCode would do the trick. To aid you in doing this, commons-lang has EqualsBuilder [1] and HashCodeBuilder [2], I highly recommend using them. Bill- [1] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/EqualsBuilder.html [2] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/HashCodeBuilder.html On Fri, Feb 6, 2015 at 9:00 AM, Michael Osipov 1983-01...@gmx.net wrote: Hi folks, I am developing a session pool for an HTTP backend which is requested with the fabulous HttpClient. The session object is this: public class RawSession { private CookieStore cookieStore; private String logId; private MutableInt requestId; private String clientId; private String serverId; } There won't be any setters but as you see, the cookie store and mutable int might change. Additionally, I did not implement any custom equals and hashCode methods. I have searched the docs and the found and did not find any clear answer which says that pooled objects have to be immutable. Though, I have found POOL-283 and POOL-284 which led me to the conclusion that this is a problem because the objects are stored in a map which relies on equals and hashCode. Does this ultimately mean that I have to override equals and hashCode and provide some internal, immutable value something like a UUID? Alternatively, I could retrieve the JSESSIONID from the cookie store and use this as a unique value. Thanks, Michael - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org
Re: Re: [POOL2] Pooling mutable objects
Try UUID.randomUUID().toString() rather than RandomStringUtils if you really want unique keys. On Fri, Feb 6, 2015 at 10:54 AM, Michael Osipov 1983-01...@gmx.net wrote: This is what I did: this.internalId = RandomStringUtils.randomAlphanumeric(8); Some Eclipse magic: @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((internalId == null) ? 0 : internalId.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; RawSession other = (RawSession) obj; if (internalId == null) { if (other.internalId != null) return false; } else if (!internalId.equals(other.internalId)) return false; return true; } Gesendet: Freitag, 06. Februar 2015 um 16:47 Uhr Von: James Carman ja...@carmanconsulting.com An: Commons Users List user@commons.apache.org Betreff: Re: [POOL2] Pooling mutable objects Or just let your IDE generate the methods. On Fri, Feb 6, 2015 at 9:05 AM, William Speirs wspe...@apache.org wrote: I'd think adding a UUID then overriding equals and hashCode would do the trick. To aid you in doing this, commons-lang has EqualsBuilder [1] and HashCodeBuilder [2], I highly recommend using them. Bill- [1] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/EqualsBuilder.html [2] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/HashCodeBuilder.html On Fri, Feb 6, 2015 at 9:00 AM, Michael Osipov 1983-01...@gmx.net wrote: Hi folks, I am developing a session pool for an HTTP backend which is requested with the fabulous HttpClient. The session object is this: public class RawSession { private CookieStore cookieStore; private String logId; private MutableInt requestId; private String clientId; private String serverId; } There won't be any setters but as you see, the cookie store and mutable int might change. Additionally, I did not implement any custom equals and hashCode methods. I have searched the docs and the found and did not find any clear answer which says that pooled objects have to be immutable. Though, I have found POOL-283 and POOL-284 which led me to the conclusion that this is a problem because the objects are stored in a map which relies on equals and hashCode. Does this ultimately mean that I have to override equals and hashCode and provide some internal, immutable value something like a UUID? Alternatively, I could retrieve the JSESSIONID from the cookie store and use this as a unique value. Thanks, Michael - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org
Re: Re: [POOL2] Pooling mutable objects
I'm not sure I understand your comment Mat. From what I can tell, Michael made his own hash function. That's fine, but *might* have unexpected collision issues. Might not too... I don't know. My guess though is that he's not an expert (who is an expert on hash functions?) and might unknowingly fall into a trap here. For example, commons-lang HashBuilder uses 37 as the prime and 17 as the initial result... Michael didn't. Maybe he's OK, maybe he's not... but why risk it? Why not just use the library and not reinvent the wheel? (Most valid reason would be not wanting to pull in a whole library for these two functions/classes.) Again, take my advice for what you paid, nothing. :-) Bill- On Fri, Feb 6, 2015 at 11:06 AM, Mat Jaggard matt...@jaggard.org.uk wrote: William - I'm not sure if you noticed, but they didn't hand-make anything. On 6 February 2015 at 16:00, William Speirs wspe...@apache.org wrote: Why wouldn't you use the HashCodeBuilder? Much simpler: return new HashCodeBuilder().append(internalId).toHashCode(); Done in 1 line, and probably fewer collisions than your hand-made one. Same with the EqualsBuilder... If you don't want the dep on commons-lang, then I can understand... but I'd just borrow their internal algo. My $0.02... Bill- On Fri, Feb 6, 2015 at 10:54 AM, Michael Osipov 1983-01...@gmx.net wrote: This is what I did: this.internalId = RandomStringUtils.randomAlphanumeric(8); Some Eclipse magic: @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((internalId == null) ? 0 : internalId.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; RawSession other = (RawSession) obj; if (internalId == null) { if (other.internalId != null) return false; } else if (!internalId.equals(other.internalId)) return false; return true; } Gesendet: Freitag, 06. Februar 2015 um 16:47 Uhr Von: James Carman ja...@carmanconsulting.com An: Commons Users List user@commons.apache.org Betreff: Re: [POOL2] Pooling mutable objects Or just let your IDE generate the methods. On Fri, Feb 6, 2015 at 9:05 AM, William Speirs wspe...@apache.org wrote: I'd think adding a UUID then overriding equals and hashCode would do the trick. To aid you in doing this, commons-lang has EqualsBuilder [1] and HashCodeBuilder [2], I highly recommend using them. Bill- [1] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/EqualsBuilder.html [2] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/HashCodeBuilder.html On Fri, Feb 6, 2015 at 9:00 AM, Michael Osipov 1983-01...@gmx.net wrote: Hi folks, I am developing a session pool for an HTTP backend which is requested with the fabulous HttpClient. The session object is this: public class RawSession { private CookieStore cookieStore; private String logId; private MutableInt requestId; private String clientId; private String serverId; } There won't be any setters but as you see, the cookie store and mutable int might change. Additionally, I did not implement any custom equals and hashCode methods. I have searched the docs and the found and did not find any clear answer which says that pooled objects have to be immutable. Though, I have found POOL-283 and POOL-284 which led me to the conclusion that this is a problem because the objects are stored in a map which relies on equals and hashCode. Does this ultimately mean that I have to override equals and hashCode and provide some internal, immutable value something like a UUID? Alternatively, I could retrieve the JSESSIONID from the cookie store and use this as a unique value. Thanks, Michael - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org - To
Re: Re: [POOL2] Pooling mutable objects
He didn't create his own hash function, he generated it in eclipse. This is better because you get all the testing of other eclipse users without any runtime dependencies. On 6 February 2015 at 16:16, William Speirs wspe...@apache.org wrote: I'm not sure I understand your comment Mat. From what I can tell, Michael made his own hash function. That's fine, but *might* have unexpected collision issues. Might not too... I don't know. My guess though is that he's not an expert (who is an expert on hash functions?) and might unknowingly fall into a trap here. For example, commons-lang HashBuilder uses 37 as the prime and 17 as the initial result... Michael didn't. Maybe he's OK, maybe he's not... but why risk it? Why not just use the library and not reinvent the wheel? (Most valid reason would be not wanting to pull in a whole library for these two functions/classes.) Again, take my advice for what you paid, nothing. :-) Bill- On Fri, Feb 6, 2015 at 11:06 AM, Mat Jaggard matt...@jaggard.org.uk wrote: William - I'm not sure if you noticed, but they didn't hand-make anything. On 6 February 2015 at 16:00, William Speirs wspe...@apache.org wrote: Why wouldn't you use the HashCodeBuilder? Much simpler: return new HashCodeBuilder().append(internalId).toHashCode(); Done in 1 line, and probably fewer collisions than your hand-made one. Same with the EqualsBuilder... If you don't want the dep on commons-lang, then I can understand... but I'd just borrow their internal algo. My $0.02... Bill- On Fri, Feb 6, 2015 at 10:54 AM, Michael Osipov 1983-01...@gmx.net wrote: This is what I did: this.internalId = RandomStringUtils.randomAlphanumeric(8); Some Eclipse magic: @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((internalId == null) ? 0 : internalId.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; RawSession other = (RawSession) obj; if (internalId == null) { if (other.internalId != null) return false; } else if (!internalId.equals(other.internalId)) return false; return true; } Gesendet: Freitag, 06. Februar 2015 um 16:47 Uhr Von: James Carman ja...@carmanconsulting.com An: Commons Users List user@commons.apache.org Betreff: Re: [POOL2] Pooling mutable objects Or just let your IDE generate the methods. On Fri, Feb 6, 2015 at 9:05 AM, William Speirs wspe...@apache.org wrote: I'd think adding a UUID then overriding equals and hashCode would do the trick. To aid you in doing this, commons-lang has EqualsBuilder [1] and HashCodeBuilder [2], I highly recommend using them. Bill- [1] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/EqualsBuilder.html [2] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/HashCodeBuilder.html On Fri, Feb 6, 2015 at 9:00 AM, Michael Osipov 1983-01...@gmx.net wrote: Hi folks, I am developing a session pool for an HTTP backend which is requested with the fabulous HttpClient. The session object is this: public class RawSession { private CookieStore cookieStore; private String logId; private MutableInt requestId; private String clientId; private String serverId; } There won't be any setters but as you see, the cookie store and mutable int might change. Additionally, I did not implement any custom equals and hashCode methods. I have searched the docs and the found and did not find any clear answer which says that pooled objects have to be immutable. Though, I have found POOL-283 and POOL-284 which led me to the conclusion that this is a problem because the objects are stored in a map which relies on equals and hashCode. Does this ultimately mean that I have to override equals and hashCode and provide some internal, immutable value something like a UUID? Alternatively, I could retrieve the JSESSIONID from the
Re: Re: [POOL2] Pooling mutable objects
The existing Pool2 implementations use equals() to decide if two objects are the same. You have to make sure that your equals() implementation returns true if and only if the objects being compared are the same as far as your use of them is concerned. So for example two Integers are equal if they have the same integral value, but two different StringBuffer instances are never equal. Once you have determined what constitutes equality for your instances, make sure that the hash code is coded accordingly, i.e. two objects that are equal() must have the same hash code. If this requirment is not met, then the HashMap used internally by Pool2 will behave unpredictably. If all RawSession instances are to be regarded as unique (which seems likely), then define equals and hash code as noted in POOL-283: https://issues.apache.org/jira/browse/POOL-283?focusedCommentId=14307637page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14307637 On 6 February 2015 at 16:34, Mat Jaggard matt...@jaggard.org.uk wrote: He didn't create his own hash function, he generated it in eclipse. This is better because you get all the testing of other eclipse users without any runtime dependencies. On 6 February 2015 at 16:16, William Speirs wspe...@apache.org wrote: I'm not sure I understand your comment Mat. From what I can tell, Michael made his own hash function. That's fine, but *might* have unexpected collision issues. Might not too... I don't know. My guess though is that he's not an expert (who is an expert on hash functions?) and might unknowingly fall into a trap here. For example, commons-lang HashBuilder uses 37 as the prime and 17 as the initial result... Michael didn't. Maybe he's OK, maybe he's not... but why risk it? Why not just use the library and not reinvent the wheel? (Most valid reason would be not wanting to pull in a whole library for these two functions/classes.) Again, take my advice for what you paid, nothing. :-) Bill- On Fri, Feb 6, 2015 at 11:06 AM, Mat Jaggard matt...@jaggard.org.uk wrote: William - I'm not sure if you noticed, but they didn't hand-make anything. On 6 February 2015 at 16:00, William Speirs wspe...@apache.org wrote: Why wouldn't you use the HashCodeBuilder? Much simpler: return new HashCodeBuilder().append(internalId).toHashCode(); Done in 1 line, and probably fewer collisions than your hand-made one. Same with the EqualsBuilder... If you don't want the dep on commons-lang, then I can understand... but I'd just borrow their internal algo. My $0.02... Bill- On Fri, Feb 6, 2015 at 10:54 AM, Michael Osipov 1983-01...@gmx.net wrote: This is what I did: this.internalId = RandomStringUtils.randomAlphanumeric(8); Some Eclipse magic: @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((internalId == null) ? 0 : internalId.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; RawSession other = (RawSession) obj; if (internalId == null) { if (other.internalId != null) return false; } else if (!internalId.equals(other.internalId)) return false; return true; } Gesendet: Freitag, 06. Februar 2015 um 16:47 Uhr Von: James Carman ja...@carmanconsulting.com An: Commons Users List user@commons.apache.org Betreff: Re: [POOL2] Pooling mutable objects Or just let your IDE generate the methods. On Fri, Feb 6, 2015 at 9:05 AM, William Speirs wspe...@apache.org wrote: I'd think adding a UUID then overriding equals and hashCode would do the trick. To aid you in doing this, commons-lang has EqualsBuilder [1] and HashCodeBuilder [2], I highly recommend using them. Bill- [1] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/EqualsBuilder.html [2] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/HashCodeBuilder.html On Fri, Feb 6, 2015 at 9:00 AM, Michael Osipov 1983-01...@gmx.net wrote: Hi folks, I am developing a session pool for an HTTP backend which is requested with the fabulous HttpClient. The session object is this:
[POOL2] Pooling mutable objects
Hi folks, I am developing a session pool for an HTTP backend which is requested with the fabulous HttpClient. The session object is this: public class RawSession { private CookieStore cookieStore; private String logId; private MutableInt requestId; private String clientId; private String serverId; } There won't be any setters but as you see, the cookie store and mutable int might change. Additionally, I did not implement any custom equals and hashCode methods. I have searched the docs and the found and did not find any clear answer which says that pooled objects have to be immutable. Though, I have found POOL-283 and POOL-284 which led me to the conclusion that this is a problem because the objects are stored in a map which relies on equals and hashCode. Does this ultimately mean that I have to override equals and hashCode and provide some internal, immutable value something like a UUID? Alternatively, I could retrieve the JSESSIONID from the cookie store and use this as a unique value. Thanks, Michael - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org
Re: Re: [POOL2] Pooling mutable objects
Hi William, William Speirs wrote: I'm not sure I understand your comment Mat. From what I can tell, Michael made his own hash function. That's fine, but *might* have unexpected collision issues. Might not too... I don't know. My guess though is that he's not an expert (who is an expert on hash functions?) and might unknowingly fall into a trap here. For example, commons-lang HashBuilder uses 37 as the prime and 17 as the initial result... Michael didn't. Maybe he's OK, maybe he's not... but why risk it? Why not just use the library and not reinvent the wheel? (Most valid reason would be not wanting to pull in a whole library for these two functions/classes.) Maybe because it can be dead-slow? https://www.mail-archive.com/user@xstream.codehaus.org/msg00677.html I use HashCodeBuilder and EqualsBilder for Mock objects only ... for good reason. Cheers, Jörg - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org
Re: [POOL2] Pooling mutable objects
On 2/6/15 10:16 AM, sebb wrote: The existing Pool2 implementations use equals() to decide if two objects are the same. As of pool 2.3. You have to make sure that your equals() implementation returns true if and only if the objects being compared are the same as far as your use of them is concerned. So for example two Integers are equal if they have the same integral value, but two different StringBuffer instances are never equal. Once you have determined what constitutes equality for your instances, make sure that the hash code is coded accordingly, i.e. two objects that are equal() must have the same hash code. If this requirment is not met, then the HashMap used internally by Pool2 will behave unpredictably. Also, hash codes should not change between the time that an object is borrowed from the pool and subsequently returned. Again, for pool 2.0-2.3 (latest as of this post), objects under management by the pool are kept in a hashmap keyed on the objects themselves, so mutability that changes hashcodes (and / or equality) can cause problems. See the discussion on POOL-284. These problems do not impact earlier (1.x) versions of Commons Pool. If all RawSession instances are to be regarded as unique (which seems likely), then define equals and hash code as noted in POOL-283: https://issues.apache.org/jira/browse/POOL-283?focusedCommentId=14307637page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14307637 On 6 February 2015 at 16:34, Mat Jaggard matt...@jaggard.org.uk wrote: He didn't create his own hash function, he generated it in eclipse. This is better because you get all the testing of other eclipse users without any runtime dependencies. On 6 February 2015 at 16:16, William Speirs wspe...@apache.org wrote: I'm not sure I understand your comment Mat. From what I can tell, Michael made his own hash function. That's fine, but *might* have unexpected collision issues. Might not too... I don't know. My guess though is that he's not an expert (who is an expert on hash functions?) and might unknowingly fall into a trap here. For example, commons-lang HashBuilder uses 37 as the prime and 17 as the initial result... Michael didn't. Maybe he's OK, maybe he's not... but why risk it? Why not just use the library and not reinvent the wheel? (Most valid reason would be not wanting to pull in a whole library for these two functions/classes.) Again, take my advice for what you paid, nothing. :-) Bill- On Fri, Feb 6, 2015 at 11:06 AM, Mat Jaggard matt...@jaggard.org.uk wrote: William - I'm not sure if you noticed, but they didn't hand-make anything. On 6 February 2015 at 16:00, William Speirs wspe...@apache.org wrote: Why wouldn't you use the HashCodeBuilder? Much simpler: return new HashCodeBuilder().append(internalId).toHashCode(); Done in 1 line, and probably fewer collisions than your hand-made one. Same with the EqualsBuilder... If you don't want the dep on commons-lang, then I can understand... but I'd just borrow their internal algo. My $0.02... Bill- On Fri, Feb 6, 2015 at 10:54 AM, Michael Osipov 1983-01...@gmx.net wrote: This is what I did: this.internalId = RandomStringUtils.randomAlphanumeric(8); Some Eclipse magic: @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((internalId == null) ? 0 : internalId.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; RawSession other = (RawSession) obj; if (internalId == null) { if (other.internalId != null) return false; } else if (!internalId.equals(other.internalId)) return false; return true; } Gesendet: Freitag, 06. Februar 2015 um 16:47 Uhr Von: James Carman ja...@carmanconsulting.com An: Commons Users List user@commons.apache.org Betreff: Re: [POOL2] Pooling mutable objects Or just let your IDE generate the methods. On Fri, Feb 6, 2015 at 9:05 AM, William Speirs wspe...@apache.org wrote: I'd think adding a UUID then overriding equals and hashCode would do the trick. To aid you in doing this, commons-lang has EqualsBuilder [1] and HashCodeBuilder [2], I highly recommend using them. Bill- [1] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/EqualsBuilder.html [2] https://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/builder/HashCodeBuilder.html On Fri, Feb 6, 2015 at 9:00 AM, Michael