对于EJB和全面发展的应用程序服务器(例如JBoss),我在大多数职业生涯中都使用特殊用途的独立Java应用程序编写和使用了Java EE的有限使用。我想知道将常用设计模式适用于EJB3和JBoss的最佳方法:静态工厂模式。事实上,这是第1项中约书亚Bloch的Effective Java的书(第2版)带有EJB3/JBoss的avaStatic工厂模式
我目前用下面的工厂工作:
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
接口,并且每个impl标有@Stateless
。现在我可以在JNDI中查找它们并使用注入的资源。
但现在我断开了连接,因为我不再使用工厂。我的第一个想法是更改getProcessor(CredentialsType)
方法来执行JNDI查找并返回所需的SLSB实例,但后来我需要配置并传递适当的限定JNDI名称。在我走下这条路之前,我想对接受的做法做更多的研究。
这是如何设计模式在EJB3处理/ Java EE的 -
我一直在阅读EJB规范。你会如何用我上面的工厂课程去解决这个问题?首先,工厂必须是EJB才能正确截取注释。那么我将如何根据上面的枚举或字符串来选择不同的实现呢? – purecharger 2010-03-30 00:36:02