In my opinion is nothing wrong with a singleton that synchronies the getInstance() method. Singletons are actually used by other tools like spring or hibernate. The service locator pattern relies upon it as well. They still have a lot of value if the developers don't abuse them. As for the double check locking pattern, it has its own drawbacks as well and if I remember correctly there are articles on the net that prove that it can fail as well in some circumstances (sorry Jeanne). Better use the synchronized getInstance(); just my opinion. Regards.
Yan, The EJB specification also discourages the use of static fields in EJB classes -- and also explains why (see section 25.1.2 of the EJB 2.1 specification).
I think the use of singleton classes should also be discouraged for the same reason. The scope of a singleton class is its class loader. Since you cannot be sure that all your EJBs will reside in the same class loader, you cannot be sure that you truly have a singleton object. However, if your singleton objet does not need to maintain any state, the above restriction is probably irrelevant.