code: private String getManagedBeansInternalEJBName(ClassInfo classInfo, AnnotationInfo managedBeanAnn) {
          String name = getStringValue(managedBeanAnn, "value");
          if (name == null) {
              name = '$' + classInfo.getName();
          }
          return name;
      }
docs: Return the ManagedBean name to be used internally by the EJBContainer.
  
  The internal ManagedBean name is the value on the annotation (which
  must be unique even compared to EJBs in the module) or the class name
  of the ManagedBean with a $ prefix. This is done for two reasons:
  
  1 - when a name is not specified, our internal derived name cannot
  conflict with other EJB names that happen to be the same.
  
  2 - when a name is not specified, the managed bean is not supposed
  to be bound into naming... the '$' will tip off the binding code.
  
  '$' is used for consistency with JDK synthesized names.