Я довольно новичок в EJB и полномасштабных серверах приложений, таких как JBoss, большую часть своей карьеры писал и работал с автономными Java-приложениями специального назначения с ограниченным использованием Java EE. Мне интересно, как лучше всего адаптировать широко используемый шаблон проектирования к EJB3 и JBoss: шаблон статической фабрики. На самом деле это пункт № 1 в книге Джошуа Блоха «Эффективная Java» (2-е издание).
В настоящее время я работаю со следующим заводом:
public class CredentialsProcessorFactory {
private static final Log log = LogFactory.getLog(CredentialsProcessorFactory.class);
private static Map<CredentialsType, CredentialsProcessor> PROCESSORS =
new HashMap<CredentialsType, CredentialsProcessor>();
static {
PROCESSORS.put(CredentialsType.CSV, new CSVCredentialsProcessor());
}
private CredentialsProcessorFactory() {}
public static CredentialsProcessor getProcessor(CredentialsType type) {
CredentialsProcessor p = PROCESSORS.get(type);
if(p == null)
throw new IllegalArgumentException("No CredentialsProcessor registered for type " + type.toString());
return p;
}
Однако в классах реализации CredentialsProcessor мне требуются внедренные ресурсы, такие как PersistenceContext
, поэтому я сделал интерфейс CredentialsProcessor
интерфейсом @Local
, а каждый из имплементов помечен @Stateless
. Теперь я могу найти их в JNDI и использовать внедренные ресурсы.
Но теперь у меня есть дисконнект, потому что я больше не использую фабрику. Моей первой мыслью было изменить метод getProcessor(CredentialsType)
, чтобы выполнить поиск JNDI и вернуть требуемый экземпляр SLSB, но затем мне нужно настроить и передать правильное квалифицированное имя JNDI. Прежде чем я пойду по этому пути, я хотел провести больше исследований общепринятых практик.
Как этот шаблон проектирования обрабатывается в EJB3/Java EE?