@Stateless
позволит вам иметь несколько готовых копий для обработки в JVM (насколько позволяет память и размер пула), где @Singleton содержит только одну копию в JVM, даже если одна может поддерживать несколько параллельные потоки, работающие против него.
С точки зрения производительности @Singleton
было бы лучше, при условии, что используемые им ресурсы обеспечивают длительный доступ. Однако в распределенной среде иногда случаются плохие вещи, например, ссылки на базу данных или сеть могут не работать.
С бином @Stateless
доступ более короткий. Кроме того, в случае сбоя он просто возродится и попытается установить новое соединение с ресурсом. Если что-то происходит в одноэлементном режиме, то это единственный, который обрабатывает его, не требуя перезапуска приложения, потому что @PostConstruct вызывается только один раз для JVM.
Я предпочел бы немного отказоустойчивости по сравнению с производительностью для большинства ситуаций, особенно в системах, которые я не контролирую.
Можно достигнуть этого с Apache палата общин StringUtils следующим образом:
String s = "http://almaden.ibm.com/";
StringUtils.removeEnd(s, "/")