Статьи

Просмотр пространства имен службы имен COS с помощью Groovy

Было время, когда CORBA была в моде и была такой же модной и популярной, как и любая популярная технология, которая появилась с тех пор. Хотя CORBA не привлекает внимания в блогах и других онлайн-СМИ, которое было бы в те дни или другие технологии сегодня, оно по- прежнему лежит в основе некоторых технологий, которые используют многие из нас. В этой статье я расскажу об использовании Groovy для просмотра объектов в иерархическом пространстве имен, связанном со службой именования Common Object Services (COS) CORBA, которая предоставляется Java IDL (которая также включает инструменты командной строки ) и поддерживает EJB-компоненты GlassFish .

Документации Oracle Java SE содержит весьма полезную страницу под названием Naming Service , которая предоставляет исходный код Java с пояснениями для добавления объектов в пространство имен , разрешение объектов из пространства имен , и просмотра имен . В этой статье я преобразую код Java, предоставляющий третий пример (просмотр пространства имен), в Groovy для сценария, который легко использовать для проверки объектов в пространстве имен. Этот сценарий показан ниже.

browseNamingService.groovy

#!/usr/bin/env groovy
//
// browseNamingService.groovy <hostname> <port>
//
// Adapted from Example #3 at
// http://docs.oracle.com/javase/7/docs/technotes/guides/idl/jidlNaming.html#example3

if (args.length < 2)
{
   println "\n\nUsage: browseNamingService.groovy <hostname> <port>\n\n"
   System.exit(-1)
}

import java.util.Properties
import org.omg.CORBA.*
import org.omg.CosNaming.*

def properties = new Properties()
properties.put("org.omg.CORBA.ORBInitialPort", args[1])
properties.put("org.omg.CORBA.ORBInitialHost", args[0])
def orb = ORB.init(args, properties)

def namingContext = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"))

def bindingList = new BindingListHolder()
def bindingListIterator = new BindingIteratorHolder()
namingContext.list(1000, bindingList, bindingListIterator)
def bindings = bindingList.value

bindings.each
{ binding ->
   def lastIndex = binding.binding_name.length-1;

   // BindingType of ncontext indicates this is a naming context; only other
   // BindingType is nobject.
   if (binding.binding_type == BindingType.ncontext)
   {
      println "Context: ${binding.binding_name[lastIndex].id}"
   }
   else
   {
      println "Object: ${binding.binding_name[lastIndex].id}"
   }
}

Для получения подробной информации о том, что делает приведенный выше скрипт, смотрите обсуждение Java-кода, из которого он был адаптирован Сценарий позволяет легко указать имя хоста и порт и найти объекты, на которые есть ссылки в пространстве имен этого хоста и порта. Это показано на GlassFish ( порт 3700 ) на следующем снимке экрана.

В этом случае я случайно узнал, что в моей установке GlassFish для этой службы именования CORBA COS использовался порт по умолчанию 3700, но я также мог найти этот порт в веб-интерфейсе администратора GlassFish, как показано на следующем снимке экрана.

Если вы не знаете соответствующий порт, а продукт, для которого вы ищете службу имен, не указывает соответствующий порт, вы можете использовать инструменты для поиска потенциальных портов, такие как netstat и TCPView for Windows . Любой из этих портов проходит через вышеуказанный сценарий без трассировки стека, и эти возвращаемые имена являются сообщениями, на которых размещена служба именования CORBA COS.