Было время, когда 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.