저는 Java EE의 제한된 사용으로 내 경력 대부분을 위해 특수 목적의 독립형 Java 응용 프로그램을 작성하고 작업 한 JBoss와 같은 완전 분사 응용 프로그램 서버 및 EJB에 상당히 익숙합니다. EJB3와 JBoss에 일반적으로 사용되는 디자인 패턴 인 정적 팩토리 패턴을 적용하는 가장 좋은 방법에 대해 궁금합니다. CredentialsProcessor의 구현 클래스에avaStatic 팩토리 패턴 (EJB3/JBoss 포함)
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;
}
그러나, 나는 주입이 필요합니다 : 사실이 (제 2 판) 내가 현재 다음과 같은 공장에서 함께 일하고 있어요
조슈아 블로흐의 효과적인 자바 책 항목 # 1 PersistenceContext
과 같은 리소스가 있으므로 CredentialsProcessor
인터페이스를 @Local
인터페이스로 만들고 각 impl을 @Stateless
으로 표시했습니다. 이제 JNDI에서 살펴보고 주입 된 리소스를 사용할 수 있습니다.
하지만 이제 공장을 더 이상 사용하지 않아 연결이 끊어졌습니다. 내 첫 번째 생각은 getProcessor(CredentialsType)
메서드를 변경하여 JNDI 조회를 수행하고 필요한 SLSB 인스턴스를 반환하지만 적절한 정규화 된 JNDI 이름을 구성하고 전달해야합니다. 내가 그 길을 가기 전에, 나는 받아 들여진 관행들에 대해 더 많은 연구를하고 싶었다.
이 디자인 패턴이 EJB3에서 처리되는 방법/자바 EE는? -
나는 이것을 EJB 스펙에서 읽었습니다. 당신은 내가 위에있는 공장 수업을 가지고 어떻게 할 것인가? 첫째, 주석은 주석이 올바르게 가로 채기 위해 EJB가되어야 할 것입니다. 그렇다면 위와 같은 열거 형 또는 문자열을 기반으로 다양한 구현을 선택하는 방법은 무엇입니까? – purecharger