When an EJB client retrieves or creates an EJB reference, the EJB container provides a stub object reference that points to the actual bean. That means that the reference contained by the client is actually a reference to the EJB stub object used by the container. Therefore, if you have more than one reference to an EJB, you could have two different stub objects that reference the same EJB. If you were to compare the references using the equals() method, it might return false, even if the stubs point to the same EJB.

To solve this problem, EJB references implement the isIdentical() method. This method compares the two objects (the invoker and the parameter) to see if they both eventually point to the same EJB (through the stub):

public class BeanComparator {

  public final void equalityTest() {
    
    SomeBean bean1 = null;
    SomeBean bean2 = null;
    String name = "testName";
    
    try {

      // get two refs to the same bean:
      bean1 = findByName(name);
      bean2 = findByName(name);
      // this comparison returns true:
      System.out.println("Does bean1 equal bean2: " 
          bean1.isIdentical(bean2));
      
      // change the first ref to another bean:
      name = "otherName";      
      bean1 = findByName(name);
      
      // this comparison returns false:
      System.out.println("Does bean1 equal bean2: " 
          bean1.isIdentical(bean2));

    catch (Exception e) {
      e.printStackTrace();
    }
  }
  
}