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

Reply via email to