Boa tarde galera! Estou precisando implementar uma factory para inicialização de EJBs por lookup.
vou receber uma key e pegar o valor do jndi em um arquivo de properties. Atravéz deste jndi, eu farei o lookup e retornarei o EJB instanciado.
Gostaria que me ajudassem a fazer uma classe que fosse genérica e que tivesse um método estático que retornasse o objeto sem precisar fazer cast na chamada.
Implementei a seguinte classe:
public class ServiceFactory {
static final Logger _log = Logger.getLogger(ServiceFactory.class);
static final Properties properties = new Properties();
public static <T> T getInstance(String key) {
try {
if (properties.values().isEmpty())
loadProperties();
String jndiBinding = properties.getProperty(key);
Context ctx = new InitialContext();
return (T) ctx.lookup(jndiBinding);
} catch (NamingException e) {
throw new RuntimeException("O nome do JNDI da Service não foi encontrado.");
}
}
private static void loadProperties() {
try {
InputStream inputStream = ServiceFactory.class.getClassLoader().getResourceAsStream("service-impl.properties");
properties.load(inputStream);
} catch (IOException e) {
_log.error(e.getMessage(), e, "");
e.printStackTrace();
}
}
}
e na chamada ficaria assim :
IClienteBO service = (IClienteBO)ServiceFactory.getInstance("key.ejb");
Queria que me ajudassem a melhorar esse código para que eu não precise desse cast na chamada. vlw