Die Bedeutung des NoInitialContextException-Fehlers

Lesezeit: 4 Minuten

Die Bedeutung des NoInitialContextException Fehlers
Attilah

Ich schreibe einen Client für mein EJB und wenn ich versuche, ihn auszuführen, erhalte ich die folgende Ausnahme:

javax.naming.NoInitialContextException: Der Klassenname muss in der Umgebungs- oder Systemeigenschaft oder als Applet-Parameter oder in einer Anwendungsressourcendatei angegeben werden.

Ich kann einfach nicht verstehen, was das Problem ist.

Der javax.naming -Paket umfasst die JNDI-API. Da es sich nur um eine API und nicht um eine Implementierung handelt, müssen Sie ihr mitteilen, welche Implementierung von JNDI verwendet werden soll. Die Implementierungen sind normalerweise spezifisch für den Server, mit dem Sie sprechen möchten.

Um eine Implementierung anzugeben, übergeben Sie a Properties Objekt, wenn Sie das konstruieren InitialContext. Diese Eigenschaften geben die zu verwendende Implementierung sowie den Standort des Servers an. Der Standard InitialContext Der Konstruktor ist nur nützlich, wenn Systemeigenschaften vorhanden sind, die Eigenschaften jedoch die gleichen sind, als ob Sie sie manuell übergeben hätten.

Welche Eigenschaften Sie einstellen müssen, hängt von Ihrem Server ab. Sie müssen diese Einstellungen suchen und anschließen.

1643239027 539 Die Bedeutung des NoInitialContextException Fehlers
Nichu09

Sie sollten jndi.properties festlegen. Ich habe unten einen Codeabschnitt angegeben, der erklärt, wie die Eigenschaften für activemq festgelegt werden. So können Sie es für Ihre Anwendung einstellen. Innerhalb eines J2EE-Containers wie JBoss müssen diese Eigenschaften nicht festgelegt werden.

Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY,"org.apache.activemq.jndi.ActiveMQInitialContextFactory");
props.setProperty(Context.PROVIDER_URL,"tcp://localhost:61616");
InitialContext ctx = new InitialContext(props);
// get the initial context
// InitialContext ctx = new InitialContext();
QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");        
// create a queue connection
QueueConnection queueConn = connFactory.createQueueConnection();   
queueConn.start();
// lookup the queue object
Queue queue = (Queue) ctx.lookup("dynamicQueues/Payment_Check");  

Ich weiß, dass dies eine späte Antwort ist, aber nur als zukünftige Referenz.

1643239027 933 Die Bedeutung des NoInitialContextException Fehlers
Stapler

Sie müssen die folgenden Name/Wert-Paare in eine Hash-Tabelle einfügen und diesen Konstruktor aufrufen:

public InitialContext(Hashtable<?,?> environment)

die genauen Werte hängen von Ihrem Anwendungsserver ab, dieses Beispiel gilt für jboss

jndi.java.naming.provider.url=jnp://localhost:1099/
jndi.java.naming.factory.url=org.jboss.naming:org.jnp.interfaces
jndi.java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

Die Bedeutung des NoInitialContextException Fehlers
JuanZe

Ist ein JNDI-Problem. Sie werden diese Ausnahme sehen, wenn die InitialContext -Klasse hat weder Standardeigenschaften für den JNDI-Dienstanbieter noch explizit konfigurierte Servereigenschaften.

Stellen Sie die ein Context.INITIAL_CONTEXT_FACTORY -Umgebungseigenschaft auf den Klassennamen der anfänglichen Kontextimplementierung, die Sie verwenden. Diese Klasse muss Ihrem Programm im Klassenpfad zur Verfügung stehen.

Überprüfen:

Insbesondere habe ich dieses Problem beim Versuch, die Standardeinstellung abzurufen (no-args) InitialContext innerhalb einer eingebetteten Tomcat7-Instanz in SpringBoot.

Die Lösung für mich war, Tomcat zu sagen enableNaming.

dh

@Bean
public TomcatEmbeddedServletContainerFactory tomcatFactory() {
    return new TomcatEmbeddedServletContainerFactory() {
        @Override
        protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
                Tomcat tomcat) {
            tomcat.enableNaming();
            return super.getTomcatEmbeddedServletContainer(tomcat);
        }
    };
}

  • In Spring Boot 2 wurde das Paket org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedServletWebServerFactory durch org.springframework.boot.web.embedded.tomcat.ConfigurableTomcatWebServerFactory ersetzt. Wie implementiere ich mit der neuen Schnittstelle?

    – Adindu Stevens

    22. August 19 um 14:41 Uhr

  • @AdinduStevens – keine Ahnung. Ich habe diese Lösung vor 3 Jahren bereitgestellt und habe Spring seitdem nicht mehr berührt. Sie müssen Ihre eigenen Nachforschungen anstellen.

    – Nick Greally

    23. August 19 um 1:20 Uhr

  • @Adindu Stevens Ich habe das gleiche Problem mit Spring Boot 2, hast du eine Lösung dafür gefunden?

    – itro

    22. April 2020 um 08:31 Uhr


  • @itro versuchen Sie dies stackoverflow.com/questions/24941829/…

    – Delirante

    5. Januar 21 um 10:52 Uhr

Die Bedeutung des NoInitialContextException Fehlers
Vaibhav Jain

Eine einfache und konfigurierbare Lösung besteht darin, eine jndi.properties-Datei zu erstellen und diese Datei im Klassenpfad abzulegen. jndi.properties kann erstellt werden als

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory

# use the following property to configure the default connector
java.naming.provider.url = vm://localhost

# use the following property to specify the JNDI name the connection factory
# should appear as. 
#connectionFactoryNames = connectionFactory, queueConnectionFactory, topicConnectionFactry

# register some queues in JNDI using the form
# queue.[jndiName] = [physicalName]
queue.MyQueue = example.MyQueue


# register some topics in JNDI using the form
# topic.[jndiName] = [physicalName]
topic.MyTopic = example.MyTopic

Geben Sie einfach Ihre Namensfabrik und URL an und fügen Sie diese Datei in Ihren Klassenpfad ein. JMS ruft die erforderlichen Informationen selbst ab und ist auch in Zukunft einfach konfigurierbar.

  • In Spring Boot 2 wurde das Paket org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedServletWebServerFactory durch org.springframework.boot.web.embedded.tomcat.ConfigurableTomcatWebServerFactory ersetzt. Wie implementiere ich mit der neuen Schnittstelle?

    – Adindu Stevens

    22. August 19 um 14:41 Uhr

  • @AdinduStevens – keine Ahnung. Ich habe diese Lösung vor 3 Jahren bereitgestellt und habe Spring seitdem nicht mehr berührt. Sie müssen Ihre eigenen Nachforschungen anstellen.

    – Nick Greally

    23. August 19 um 1:20 Uhr

  • @Adindu Stevens Ich habe das gleiche Problem mit Spring Boot 2, hast du eine Lösung dafür gefunden?

    – itro

    22. April 2020 um 08:31 Uhr


  • @itro versuchen Sie dies stackoverflow.com/questions/24941829/…

    – Delirante

    5. Januar 21 um 10:52 Uhr

1643239028 679 Die Bedeutung des NoInitialContextException Fehlers
Maarten van Leunen

Meistens sind diese Einstellungen auch in a definiert jndi.properties Datei. Hast du das irgendwo rumliegen?

.

652540cookie-checkDie Bedeutung des NoInitialContextException-Fehlers

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy