WildFly JNDI-lookup für lokale EJB bereitgestellt, die in einem KRIEG

Ich bin mit WildFly 8.1.0 Finalen Version.

Meine Anwendung ist eine Java ee web-app bereitgestellt, die in einem KRIEG (es gibt keine EJB-Modul .Ohr).

Möchte ich programmatisch aufrufen lokale EJB-mit seinem Namen über JNDI.

EJB sind nur annotiert mit @Stateless (es gibt keine Lokalen oder Remote-Schnittstellen)

Ich versuche unten Funktion:

private <E extends DomainObject> CrudService<E> lookUp(Class<E> cl) {
    try {
        final Hashtable jndiProperties = new Hashtable();
        jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
        final Context context = new InitialContext(jndiProperties);
        //The app name is the application name of the deployed EJBs. This is typically the ear name
        //without the .ear suffix. However, the application name could be overridden in the application.xml of the
        //EJB deployment on the server.
        //Since we haven't deployed the application as a .ear, the app name for us will be an empty string
        final String appName = "";
        //This is the module name of the deployed EJBs on the server. This is typically the jar name of the
        //EJB deployment, without the .jar suffix, but can be overridden via the ejb-jar.xml
        //In this example, we have deployed the EJBs in a jboss-as-ejb-remote-app.jar, so the module name is
        //jboss-as-ejb-remote-app
        final String moduleName = "jboss-as-ejb-remote-app";
        //AS7 allows each deployment to have an (optional) distinct name. We haven't specified a distinct name for
        //our EJB deployment, so this is an empty string
        final String distinctName = "";
        //The EJB name which by default is the simple class name of the bean implementation class
        final String serviceName = cl.getSimpleName() + "Service";
        //let's do the lookup
        return (CrudService<E>) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + serviceName );
        //return (CrudService<E>) context.lookup(serviceName);
    } catch (NamingException e) {
        log.error("NamingException {}",e) ;
        throw new RuntimeException(e) ;
    }
}

aber es funktioniert nicht (obviusly es ist für remote EJB)

Aber ich finde nicht jedes Beispiel, für die lokale EJB in einen KRIEG mit WildFly und ich habe keine Ahnung, wie zu tun, ich glaube nicht, JNDI verwenden oft...

Fand ich ein work arround Annotation EJB mit @Named(Wert="EjbClassName") und rufen Sie Sie mithilfe von JSF.

FacesContext context = FacesContext.getCurrentInstance() ;
return context.getApplication().evaluateExpressionGet(context, "#{"+cl.getSimpleName()+"Service}", CrudService.class) ;

Es funktioniert und es ist,

aber ich würde es vorziehen, nicht mit JSF, weil es nicht im Zusammenhang mit der view-Schicht.

Sobald Sie bereitstellen der Krieg, den WildFly server nicht anmelden JNDI-Namen, die geladen werden? In glassfish kann ich dies tun, um herauszufinden, die korrekte lookup-string...

InformationsquelleAutor kwisatz | 2014-09-24

Schreibe einen Kommentar