Ich versuche herauszufinden, die beste Möglichkeit zum Definieren von Remote EJB 3 Beans in Spring 4.x mit JavaConfig (Annotation-basierte Konfiguration) .So definieren Sie Remote EJBs Beans im Frühling mit Annotation-basierten Konfiguration (zB: JavaConfig)
Ich habe am Spring Docs for <jee:remote-slsb>
geschaut und haben zusammen eine funktionale Konfiguration gehackt, aber es ist schrecklich:
@Bean
public LoginManager getLoginManager(){
SimpleRemoteStatelessSessionProxyFactoryBean factory = new SimpleRemoteStatelessSessionProxyFactoryBean();
String beanName = "jndi.ejb3.LoginManager";
factory.setJndiName(beanName);
factory.setBusinessInterface(LoginManager.class);
Properties p = new Properties();
p.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
p.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
p.setProperty("java.naming.provider.url", "jnp:localhost:1099");
factory.setJndiEnvironment(p);
try {
factory.afterPropertiesSet();
} catch (NamingException e1) {
e1.printStackTrace();
}
return (LoginManager) factory.getObject();
}
ich nicht afterPropertiesSet()
in der Bean-Definition sollte anrufen, und ich würde das erwarten die getObject()
sollte automatisch von Spring aufgerufen werden. Darüber hinaus bedeutet es auch, die Factory für jeden Remote EJB zu definieren, den ich laden möchte, was nicht richtig erscheint. Ich hätte mir gewünscht/erwartet, dass ich eine wiederverwendbare Fabrik definieren und einfach den Interface/JNDI-Namen für jede Bean-Erstellung übergeben könnte, aber das funktioniert nicht.
Die spring docs zeigen:
Auch mit @Bean Methoden, werden Sie in der Regel wählen programmatische JNDI-Lookups verwenden: entweder mit Spring JndiTemplate/JndiLocatorDelegate Helfer oder gerade JNDI Initial Nutzung, aber nicht die JndiObjectFactoryBean-Variante, die Sie zwingen würde, den Rückgabetyp als FactoryBean-Typ anstelle des tatsächlichen Zieltyps zu deklarieren, so dass es schwieriger für Querverweisaufrufe in anderen @Bean-Methoden, die aufbeziehen wollen 10 die hier zur Verfügung gestellte Ressource.
So jetzt bin ich verwirrt, was zu tun ist.
Die EJB Specific spring docs empfehlen auch die SimpleRemoteStatelessSessionProxyFactoryBean
mit:
definieren explizit
<jee:local-slsb>
/<jee:remote-slsb>
Lookups einfach konsistente und explizite EJB Zugriffskonfiguration zur Verfügung stellt.
Also wie mache ich das sauber?
zusätzlich können Sie Ihre Eigenschaften injizieren, wenn Sie diese externalisieren möchten. – Pierre