if (context.getMethod().getName().equals("equals")
|| context.getMethod().getName().equals("isIdentical")) {
final Object other = context.getParameters()[0];
final ComponentView componentView = context.getPrivateData(ComponentView.class);
final Class<?> proxyType = componentView.getProxyClass();
final SessionID sessionId = context.getPrivateData(SessionID.class);
if( proxyType.isAssignableFrom(other.getClass())) {
//now we know that this is an ejb for the correct component view
//as digging out the session id from the proxy object is not really
//a viable option, we invoke equals() for the other instance with a
//SessionIdHolder as the other side
return other.equals(new SessionIdHolder(sessionId));
} else if(other instanceof SessionIdHolder) {
return sessionId.equals( ((SessionIdHolder)other).sessionId);
} else {
return false;
}
} else if (context.getMethod().getName().equals("hashCode")) {
final SessionID sessionId = context.getPrivateData(SessionID.class);
//use the identity of the component view as a hash code
return sessionId.hashCode();
} else {
return context.proceed();
}
}