NoInitialContextException: необходимо указать имя класса в среде или системном свойстве [duplicate]

Хорошо, это похоже на полное решение для всех случаев, упомянутых в вопросе, проверенных с помощью Python 2.7 и Python 3.5. Общее решение закончилось тем, что повторно открыло дескриптор файла, но вместо io.BytesIO вам нужно использовать канал для тестового двойника, чтобы у вас был файловый дескриптор.

import io
import subprocess
import os

# Example function, re-opens a file descriptor for UTF-8 decoding,
# reads until EOF and prints what is read.
def read_as_utf8(fileno):
    fp = io.open(fileno, mode="r", encoding="utf-8", closefd=False)
    print(fp.read())
    fp.close()

# Subprocess
gpg = subprocess.Popen(["gpg", "--version"], stdout=subprocess.PIPE)
read_as_utf8(gpg.stdout.fileno())

# Normal file (contains "Lorem ipsum." as UTF-8 bytes)
normal_file = open("loremipsum.txt", "rb")
read_as_utf8(normal_file.fileno())  # prints "Lorem ipsum."

# Pipe (for test harness - write whatever you want into the pipe)
pipe_r, pipe_w = os.pipe()
os.write(pipe_w, "Lorem ipsum.".encode("utf-8"))
os.close(pipe_w)
read_as_utf8(pipe_r)  # prints "Lorem ipsum."
os.close(pipe_r)
46
задан ROMANIA_engineer 20 November 2015 в 14:24
поделиться

11 ответов

Я решил ту же проблему, добавив в мой проект следующие библиотеки Jar:

  • appserv-rt.jar
  • javaee.jar

из папки: C:\Program Files\glassfish-4.0\glassfish\lib

Ссылки на эти библиотеки были повреждены, а Netbeans не нашли подходящие классы для использования.

1
ответ дан Kevin Panko 23 August 2018 в 17:06
поделиться

В большинстве случаев эти настройки также определены в файле jndi.properties. У вас есть тот, кто лежит где-то?

1
ответ дан Maarten van Leunen 23 August 2018 в 17:06
поделиться

убедитесь, что включены зависимости для именования причалов и причала плюс (не только предоставленная область). Это исправило это для меня.

0
ответ дан Neocy 23 August 2018 в 17:06
поделиться

В частности, я получил эту проблему при попытке получить по умолчанию (no-args) InitialContext во встроенном экземпляре Tomcat7 в SpringBoot.

Решение для меня заключалось в том, чтобы сообщить Tomcat enableNaming.

, т.е.

@Bean
public TomcatEmbeddedServletContainerFactory tomcatFactory() {
    return new TomcatEmbeddedServletContainerFactory() {
        @Override
        protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
                Tomcat tomcat) {
            tomcat.enableNaming();
            return super.getTomcatEmbeddedServletContainer(tomcat);
        }
    };
}
4
ответ дан Nick Grealy 23 August 2018 в 17:06
поделиться

Является проблемой JNDI. Вы увидите это исключение, если класс InitialContext не имеет свойств по умолчанию для поставщика услуг JNDI или явно настроенных свойств сервера.

Установите свойство среды Context.INITIAL_CONTEXT_FACTORY для имени класса начальной реализации контекста, с помощью. Этот класс должен быть доступен вашей программе в пути к классам.

Проверить:

http://docs.oracle.com/javase/7/docs/api/javax /naming/InitialContext.html

http://java.sun.com/products/jndi/tutorial/getStarted/TOC.html (проблемы времени выполнения)

9
ответ дан OO7 23 August 2018 в 17:06
поделиться

Сделайте это:

Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
Context initialContext = new InitialContext(props);

Также добавьте это в библиотеки проекта:

C:\installs\glassfish\glassfish-4.1\glassfish\lib\gf-client.jar соответственно отрегулируйте путь

7
ответ дан ROMANIA_engineer 23 August 2018 в 17:06
поделиться

вам нужно использовать jboss-client.jar в вашем проекте клиента, и вам нужно использовать jnp-client jar в проекте ejb

0
ответ дан Sangram Badi 23 August 2018 в 17:06
поделиться

Пакет javax.naming содержит API JNDI. Поскольку это просто API, а не реализация, вам нужно сказать, какую реализацию JNDI использовать. Реализации, как правило, специфичны для сервера, с которым вы пытаетесь поговорить.

Чтобы указать реализацию, вы передаете объект Properties при создании InitialContext. Эти свойства определяют используемую реализацию, а также местоположение сервера. Конструктор InitialContext по умолчанию полезен только при наличии системных свойств, но свойства такие же, как если бы вы передавали их вручную.

Что касается свойств, которые необходимо установить, которые зависят от вашего сервер. Вам нужно отследить эти настройки и подключить их.

28
ответ дан skaffman 23 August 2018 в 17:06
поделиться

вам нужно поместить следующие пары имени / значения в Hashtable и вызвать этот конструктор:

public InitialContext(Hashtable<?,?> environment)

точные значения зависят от вашего сервера приложений, этот пример для 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
9
ответ дан stacker 23 August 2018 в 17:06
поделиться

Моя проблема с этим состояла в том, что я создавал сеанс hibernate, но неправильно настроил параметры JNDI для моего экземпляра базы данных из-за проблемы с classpath. Просто FYI ...

1
ответ дан Thom 23 August 2018 в 17:06
поделиться

Easy & amp; настраиваемое решение создает один файл jndi.properties и помещает этот файл в classpath. jndi.properties может быть создан как

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

Просто укажите свою фабрику имен и amp; url и поместите этот файл в свой путь к классам. JMS будет получать необходимую информацию сама по себе, и ее также легко настроить в будущем.

2
ответ дан Vaibhav Jain 23 August 2018 в 17:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: