Наиболее распространенная причина этой ошибки, выполняя HelloServer (и также HelloClient) из учебного руководства по IDL Java состоит в том, что HelloServer не находится в пути к классу. Для получения дополнительной информации по установке переменной пути к классу см. Установку пути к классу.
Вторая наиболее распространенная причина происходит, когда пространство добавляется между кавычками в следующей строке кода:
NameComponent nc = new NameComponent("Hello", "");
Между кавычками не должно быть никаких пробелов. Без пробелов это значение передают как нуль. С пространством между расценками передают пробел.
Мои существующие программы не выполняют использование этого выпуска. Есть ли какие-либо проблемы совместимости, которые могли влиять на это?
Почему я не могу соединить IOR's использования от сервера Linux, когда IOR содержит 127.0.0.0 как адрес узла?
На Red Hat установки Linux InetAddress.getLocalHost() может возвратить InetAddress, соответствующий петлевому адресу (127.0.0.1). Это возникает, потому что установка по умолчанию создает ассоциацию в /etc/hosts между именем хоста машины и петлевым адресом. Чтобы гарантировать, что InetAddress.getLocalHost() возвращает фактический адрес узла, обновите файл /etc/hosts или конфигурационный файл службы имен (/etc/nsswitch.conf), чтобы запросить dns или Нис прежде, чем искать узлы.
Новые версии стандарта (OMG) незначительные исключения кода могут быть найдены на Веб-сайте OMG в http://www.omg.org/.
Часть наиболее распространенного Sun незначительные исключения кода является следующим:
COMM_FAILURE/201. vmcid: SUN незначительный код: 201 буквально означает "CONNECT_FAILURE". Это может быть вызвано a java.net.SocketException, обычно один из BindException, ConnectException, или NoRouteToHostException.
Некоторые вещи проверить:
Служба именования работает? В противном случае запустите ORBD именование службы как описано в Запуске документа и Остановке ORBD.
-ORBInitialHost и -ORBInitialPort значения, устанавливаемые правильно для службы именования? Если Вы не уверены в том, каковы настройки должны быть, считайте Запуск документа и Остановку ORBD.
Приложения клиента и сервера знают о номере порта (и машинное имя, если применимый), куда Служба Именования работает? Считайте Запуск и Остановку ORBD для получения дополнительной информации о том, как сделать это.
COMM_FAILURE/208. vmcid: SUN незначительный код: 208 буквально означает "АВАРИЙНОЕ ПРЕКРАЩЕНИЕ РАБОТЫ СОЕДИНЕНИЯ", которое обычно означает, что соединение было отброшено.
COMM_FAILURE/209. vmcid: SUN незначительный код: 209 буквально означает "CREATE_LISTENER_FAILED": Unable to create the listener thread on the specific port. Either the post is taken or there was an error creating the daemon thread. Это обычно указывает, что порт, на который Вы пытаетесь выполнить службу именования, используется другим процессом. Если Вы работаете на Солярисе, Вы могли бы обнаружить, работает ли что-то на этом порту, используя следующую терминальную быструю команду:
netstat | grep port_number
OBJECT_NOT_EXIST/204. vmcid: SUN незначительный код: 204 буквально означает "SERVANT_NOT_FOUND". Это только бросается в одно место: corba.INSSubcontract.getINSReference.
УПОРЯДОЧИТЬ/217. vmcid: SUN незначительный код: 217 средств, что Ваш клиент попытался отправить любому a wchar или wstring в GIOP 1.0, который не является законным в спецификации.
УПОРЯДОЧИТЬ/202. vmcid: SUN незначительный код: 202 средства, что код пытается упорядочить объект, который происходит из org.omg.CORBA.Object, но что определенный экземпляр никогда не соединялся с ШАРОМ. При использовании POA Вы должны зарегистрировать объект в POA сначала. Если Вы нуждаетесь в большей информации о том, как зарегистрировать объект в POA, обратитесь к Переносимому Объектному Адаптеру (POA) или Начинанию с учебным руководством по IDL Java™.
BAD_PARAM/201. vmcid: SUN незначительный код: 201 буквально означает "NULL_PARAM". Это исключение часто происходит потому что Java null был дан a write метод такой как write_string, write_octet_array, и т.д.. Невозможно возвратить Java null как результат метода Java.
org.omg. CORBA.INTERNAL.vmcid: SUN незначительный код: 208 средств Unable to determine local hostname using InetAddress.getLocalHost().getHostName().
Использование ШАРА InetAddress.getLocalHost().getHostName() создать ссылку на службу имен для поиска и/или привязки ссылок. Это также использует InetAddress.getLocalHost().getHostName() на серверной стороне, чтобы создать ссылки удаленного объекта (то есть, IORs), которые содержат имя/порт сервера (а не dotted-decimal/port пара).
Избегать звонка getHostName, можно установить следующие свойства (отошлите к Запуску и Остановке ORBD, если Вы не уверены, как сделать это):
Набор com.sun.CORBA.ORBServerHost к имени DNS или точечно-десятичному адресу сервера, если ШАР действует как сервер.
Набор com.sun.CORBA.ORBInitialHost к имени DNS или точечно-десятичному адресу сервера имени.
ОТМЕТЬТЕ: Эти свойства являются собственными и подвергаются удалению или изменению.
Более длинная версия этого вопроса была следующие: Мой серверный код нуждается в многократных файлах JAR в пути к классу. Когда я регистрирую свой сервер, используя servertool, и попытайтесь определить путь к классу, я получаю синтаксис register команда. Я предполагаю, что моя командная строка превышает предел.
Как делают я определяю действительно долгий путь к классу, регистрируя сервер в servertool?
servertool действительно принимает многократные файлы JAR, однако, есть в настоящий момент ошибка с длиной буфера командной строки в servertool. Читайте больше о servertool ошибка обертки, 4482166.
Обходное решение должно вызвать ServerTool класс, чтобы запустить сервер, вместо того, чтобы запустить сервер изнутри servertool, такой как:
Если служба именования не в состоянии запуститься на Linux, включайте следующие строки в /etc/hosts файл:
<Local Host IP Address> localhost
<Local Host IP Address> <HostName>
где <Локальным IP-адресом Узла> является IP-адрес где служба именования (tnameserv, orbd) запускается.
Функции
Что модель потока поддерживается реализацией CORBA в этом выпуске?
Java ШАР CORBA, поставленный в Java SE, многопоточен. На серверной стороне у нас есть пул потоков так, что, каждый входящий запрос обрабатывается отдельным потоком. Если потоки всего пула используются, когда новый запрос входит, новый поток создается и добавляется к пулу. Поток возвращается к пулу после того, как запрос заканчивается. Java ШАР CORBA является поточным, чтобы позволить масштабируемость и параллельную обработку запросов. Опция SINGLE_THREAD для POA поточная обработка политики не поддерживается. Модель потоков для Java ШАР CORBA неявна: пользователь не устанавливает политику потока для ШАРА. Нет никаких внешних, API на уровне пользователя, представленных для того, чтобы управлять моделью потоков или числом потоков.
IDL Java содержит службы уведомления/события? Интерфейсный Репозитарий?
Нет, это не делает. Если Вы нуждаетесь в одной из этих служб, можно реализовать один, можно купить один с полки, или можно искать одно в свободном доступе, чтобы начать вещи с. Вы можете сменные 3-ьи службы стороны, такие как они к ШАРУ, используя технологию INS.
Как я могу выполнить Привет Мировой пример на двух машинах?
Вы должны использовать опцию -ORBInitialHost <Host Name where Name Service is Launched>, запуская клиент и/или сервер (какой бы ни не работает на той же самой машине как сервер имени). Этим путем клиент и сервер знает, где найти службу имен. Пример может быть найден в IDL Java: "Привет Мировой" Пример на Двух Машинах.
Действительно ли технология IDL Java совместима со спецификациями CORBA?
Чтобы использовать ШАР кроме Java ШАР CORBA в Вашем приложении, можно установить свойство org.omg.CORBA.ORBClass в ШАР Вашего выбора. Например, используйте код как показано в примере, чтобы явно установить ШАР в РЕАЛИЗАЦИЮ ШАРА, которую Вы предпочли бы использовать:
public class MyApp {
public static void main( String args[] ) {
Properties properties = System.getProperties();
properties.put( "org.omg.CORBA.ORBClass",
"<com.other_company.package.ORB>" );
try {
ORB orb = ORB.init( args, properties);
...
Проверьте документацию поставщика на информацию об установке свойств, определенных для их реализации ШАРА.
Как я могу протестировать, может ли мой Клиент ШАРА JDK связаться с реализацией ШАРА другой компании?
Этот ШАР был протестирован как часть аттестации J2EE, однако, это не было протестировано с автономными ШАРАМИ всего поставщика CORBA.
Если INS поддерживается в службе другого поставщика, то, попробуйте это. Преобразуйте Взаимодействующие Ссылки на объект (см. ID Java: Взаимодействующий Пример Службы Именования) на сервере ШАРА другого поставщика к строке, используя метод ORB.object_to_string(), используя INS. Запишите что строка в файл.
У Вас есть какие-либо примеры, которые используют клиент CORBA и серверное приложение EJB?
Когда Вы делаете orb.resolve_initial_references( "NameService" ), следует быть в состоянии соединиться со службой имен 3-ьей стороны. Если Вы все еще не в состоянии соединиться, попробуйте эти подсказки поиска и устранения неисправностей:
Проверьте, что служба имен 3-ьей стороны поддерживает INS.
Проверьте, что информация об узле и порте точна.
Проверьте, что служба имен 3-ьей стороны была запущена успешно.
Проверьте, что служба имен 3-ьей стороны поддерживает GIOP 1.2. В противном случае отошлите к документации Сервера Имени для корректного версию GIOP, и измените corbaloc: URL соответственно.
Определите, есть ли у службы имен 3-ьей стороны различный объектный ключ, она использует, чтобы связаться с NameService. Если так, сошлитесь на документацию Сервера Имени.
Я могу использовать ШАР IDL Java с C++ сервер CORBA? (функциональная совместимость)
ШАРОМ IDL Java является ШАР полностью записанная технология Java использования. Компилятор idlj генерирует код, который следует за соглашениями, определенными в IDL к Спецификации Отображения Языка Java. ШАР Java не обеспечивает компилятор, который генерирует код на любых языках кроме платформы Java. Если Вы будете хотеть протестировать функциональную совместимость между ШАРОМ Java и ШАРОМ, записанным на другом языке (таком как C++), то Вы должны будете счесть ШАР записанным на том языке и компиляторе, который соответствует определенному отображению языка. Спецификации отображения языка доступны от Веб-сайта Группы по управлению объектами в http://www.omg.org/. Пользователь, который хочет использовать платформу Java на одной стороне и C++ на другом, только совместно использует IDL. Необходимо использовать свои инструменты ШАРА C++, чтобы генерировать тупики и скелеты для использования с ШАРОМ C++, но Вы не должны изменить IDL вообще. Чтобы найти поставщика, который обеспечивает ШАР CORBA и компилятор отображения языка на языке, с которым Вы работаете, ищите сеть "C++ ШАР CORBA", или эквивалентный.
Хотя это - истина, что ШАРЫ, записанные на различных языках, должны быть в состоянии говорить с друг другом, мы не протестировали функциональную совместимость ШАРА Java с ШАРАМИ другого поставщика.
Общий
Я должен использовать IDL Java или технологию IIOP RMI Java?
Это - фундаментальный вопрос, и важно понять различие между этими двумя способами интегрировать язык программирования Java с CORBA.
Технология IDL Java для программистов CORBA, которые хотят программировать в языке программирования Java, основанном на интерфейсах, определенных в Языке определения интерфейсов CORBA (IDL). Это - "обычный бизнес" программирование CORBA, поддерживая Java точно таким же образом как другие языки как C++ или КОБОЛ.
Удаленный Вызов метода Java по интернет-Протоколу Межшара ("IIOP RMI"), который технология для программистов Java, которые хотят программировать к Java Удаленный Вызов метода ("Java RMI") интерфейсы, но IIOP использования как базовый транспорт. IIOP RMI предоставляет функциональной совместимости другие объекты CORBA, реализованные на различных языках - но только если все удаленные интерфейсы первоначально определяются как Java интерфейсы RMI. Это особенно интересно к Предприятию использования программистов JavaBeans™ (EJB™) технология, так как модель удаленного объекта EJB основана на Java технология RMI.
Где я могу загрузить idltojava компилятор?
idltojava компилятор больше не доступен для скачивания. Мы настоятельно рекомендуем, чтобы Вы использовали последнюю версию компилятора IDL к Java, idlj.
Чтобы получить последнюю версию компилятора IDL к Java, загрузите последнюю версию Платформы Java™, Standard Edition (Java SE). Когда Java, SE устанавливается, idlj, будет расположен в каталоге bin.
Другая информация о поиске и устранении неисправностей, связанная с idltojava, располагается в FAQ IDL Java для J2SE v.1.3.
Каковы мои опции для того, чтобы разработать приложения CORBA, используя технологию Java?
Технология CORBA как часть Java 2 платформы состоит из Посредника запросов к объектам (ШАР), записанный на языке Java (с маленьким битом собственного кода), модель программирования RMI, и модель программирования IDL. "Волшебство", которое дает нам межъязыковую, функциональную совместимость перекрестного поставщика, является Интернетом Протокол InterORB, или IIOP. IIOP может быть транспортным протоколом для распределенных приложений, записанных или в IDL или в Java RMI. IIOP позволяет распределенным объектам соответствовать спецификации OMG CORBA. При использовании модели программирования IDL интерфейс - все! Это определяет точки записи, которую можно вызвать от удаленного процесса, такого как типы параметров, которые вызванная процедура примет, или параметр значения/вывода возвращенной информации. Используя IDL, программист может сделать точки входа и типы данных, которые передают между действием коммуникационных процессов как стандартный язык. CORBA является нейтральной языком системой, в которой значения аргументов или возвращаемые значения ограничиваются тем, что может быть представлено на включенных языках реализации. В CORBA объектная ориентация ограничивается только объектами, которые может передать ссылка (сам объектный код нельзя передать от от машины к машине), или предопределяются в полной платформе. Переданные и возвращенные типы должны быть объявленными в интерфейсе. С RMI IDL и язык реализации являются той же самой вещью, таким образом, Вы не должны волноваться об отображении от одного до другого. Объекты на уровне языка (код непосредственно) можно передать от одного процесса до следующего. Значения могут быть возвращены их фактическим типом, не объявленным типом. Или, можно скомпилировать интерфейсы, чтобы генерировать совместимые IIOP тупики и скелеты, чтобы говорить с объектами, записанными на других машинах на других CORBA-совместимых языках.
Каково различие между IDL Java и IIOP RMI Java?
Это - фундаментальный вопрос, и важно понять различие между этими двумя способами интегрировать язык программирования Java с CORBA. IDL Java для программистов CORBA, которые хотят программировать в языке программирования Java, основанном на интерфейсах, определенных в Языке определения интерфейсов CORBA (IDL). Это - "обычный бизнес" программирование CORBA, поддерживая язык Java точно таким же образом как другие языки как C++ или КОБОЛ. IIOP RMI Java (Удаленный Вызов метода по интернет-Протоколу Межшара) для разработчиков, которые хотят использовать язык программирования Java для программы к Java интерфейсы RMI, но IIOP использования как базовый транспорт. IIOP RMI Java предоставляет функциональной совместимости другие объекты CORBA, реализованные на различных языках - но только если все удаленные интерфейсы первоначально определяются как Java интерфейсы RMI. Это особенно интересно к Предприятию использования программистов JavaBeans (EJB), так как модель удаленного объекта для EJB's основана на RMI. Есть несколько сценариев, которые определят, как Вы будете хотеть создать распределенные приложения CORBA. Вот некоторые из них:
IDL Java - Если Вы разрабатывали приложения CORBA, используя IDL в течение некоторого времени, Вы будете, вероятно, хотеть остаться в этой среде. Создайте интерфейсы, используя IDL, и определите приложения клиента и сервера, используя язык программирования Java, чтобы использовать в своих интересах его мобильность, его очень производительную среду реализации, и ее очень устойчивую платформу.
RMI-JRMP - Если все Ваши приложения пишутся в языке программирования Java, Вы будете, вероятно, хотеть использовать Java технология RMI, чтобы включить передаче между объектами Java на различных виртуальных машинах и различных физических машинах. Используя Java RMI без его опции IIOP усиливает свои сильные места переносимости кода, безопасности, и сборки "мусора".
IIOP RMI Java - Если Вы пишете большинство своих новых приложений, используя язык программирования Java, но должны поддержать унаследованные приложения, записанные в других языках программирования также, Вы будете, вероятно, хотеть использовать Java RMI с его опцией компилятора IIOP.