|
Spec-Zone .ru
спецификации, руководства, описания, API
|
| Содержание | Предыдущий | Следующий | Расширения управления Java (JMX) Технологическое Учебное руководство |
Расширения управления Java (JMX) спецификация определяют три привязки к службам поиска, используя существующие технологии поиска, как описано в следующих разделах:
Службы поиска позволяют технологическим клиентам JMX находить и соединяться с серверами соединителя, которые зарегистрировались в службах поиска.
Как показано просто в Разделе "Доступ к Стандартному и Динамическому MBeans через Соединитель RMI", если Вы используете удаленный вызов метода (RMI) соединители, можно хотеть использовать внешний каталог, чтобы зарегистрировать тупики сервера соединителя, которые Вы хотите искать. Следующие случаи представляются в примерах службы поиска, касающихся соединителей RMI:
Если Вы хотите регистрировать тупики соединителя RMI во внешнем каталоге, некоторая начальная конфигурация требуется, чтобы установить Ваш реестр RMI, CORBA именование службы или сервера LDAP. Если Вы не используете внешний каталог, тупик соединителя RMI кодируется в службу JMX URL.
Следующие разделы описывают внешние каталоги, что можно использовать в соединении с примерами службы поиска то использование соединители RMI. Эти внешние каталоги упоминаются, выполняя три примера служб поиска, которые даются в последующих разделах в этой главе.
Чтобы зарегистрировать тупики сервера соединителя RMI во внешнем реестре RMI, для использования соединителями, реализовывая транспорт JRMP, выполняют следующие действия:
Как имел место в Главе 3, "Соединители JMX", реестр RMI используется, чтобы сохранить тупики соединителя RMI для соединителей RMI, реализовывая транспорт JRMP.
$ rmiregistry 9999 &
Чтобы сократить команды, которые Вы введете, когда Вы выполните примеры, устанавливает службу URL для реестра RMI как переменная окружения, jndirmi. В этих примерах служба URL дается в форме JNDI. См. документацию API для javax.management.remote.rmi пакет для объяснения формы JNDI. Если Вы хотите выполнить внешние каталоги на машине кроме локальной машины, следует определить что имя хоста машины вместо localhost.
$
jndirmi = "rmi://localhost:9999"
Чтобы зарегистрировать тупики сервера соединителя RMI во внешнем CORBA именование службы, для использования соединителями, реализовывая транспорт IIOP, выполняют следующие действия:
Соединители RMI, которые реализуют транспорт IIOP, могут использовать CORBA, называющий, чтобы идентифицировать тупик соединителя RMI.
$ orbd-ORBInitialPort 7777 &
Чтобы сократить команды, которые Вы вводите, когда Вы выполняете примеры, устанавливает службу URL для CORBA именование службы как переменная окружения, jndiiiop. В этих примерах служба URL дается в форме JNDI. Если Вы хотите выполнить внешние каталоги на машине кроме локальной машины, следует определить что имя хоста машины вместо localhost.
$
jndiiiop = "iiop://localhost:7777"
Чтобы зарегистрировать тупики сервера соединителя RMI во внешнем реестре LDAP, для использования соединителями, реализовывая или JRMP или транспортов IIOP, выполняют следующие действия:
Сервер LDAP, который Вы используете, является Вашим выбором, хотя схема для того, чтобы представить объекты Java в каталоге LDAP должна быть известна серверу. См. соответствующий Запрос На Комментарии (RFC) документ для деталей:
Эти примеры требуют, чтобы Вы создали следующий компонентный суффикс домена:
dc=Test
См., что документация сопровождает Ваш сервер LDAP для деталей того, как сконфигурировать сервер и создать этот суффикс.
Эти переменные используются, чтобы сократить команды, которые Вы вводите, запуская классы Сервера и Клиента в примерах службы поиска, которые регистрируют тупики соединителя RMI во внешнем сервере LDAP.
$ ldaphost=ldap_host
$ ldapport=ldap_port
$ принципал = ”cn=Directory менеджер”
Предоставьте пароль для своего сервера LDAP.
$ credentials=your_ldap_password
В этом примере формируется служба, которую URL для сервера LDAP дается в JNDI, и идентифицируется переменной jndildap.
$
jndildap = "ldap://$ldapport $ldaphost:"
Технология JMX определяет, как зарегистрировать соединители RMI в службе поиска SLP.
Цель этого примера состоит в том, чтобы демонстрировать, как JMX Удаленный клиент соединителя API может найти и соединиться с сервером соединителя, который зарегистрировался в службе поиска SLP. Этот пример выполняет следующие операции:
Этот пример предполагает, что Вы уже знакомы с . Код, предусмотренный, этот пример соответствует реализации Sun Microsystems SLP, как определено RFC 2614 (см. . Реализация Sun Microsystems SLP доступна в операционной среде Соляриса в каталоге/usr/share/lib/slp. Если Вы не выполняете операционную среду Соляриса, следует получить версию SLP, который совместим с RFC 2614, раздел 5. Можно загрузить реализацию Java OpenSLP с
Пример поиска SLP содержится в каталоге work_dir/jmx_examples/Lookup/slp.
/jmx_examples/Lookup/slp.
В этом каталоге Вы найдете следующие файлы:
*.java файлы в текстовом редакторе.
Эти классы будут проанализированы в следующих разделах.
Следующие разделы анализируют каждый из классов, используемых в примере поиска SLP, и объясняют, как они выполняют операции, описанные выше.
Server.java и Client.java импортировать Вашу версию классов Java SLP вместо com.sun.slp пакет. См. RFC 2614, раздел 5. Из-за его размера, службы поиска SLP Server.java class показывают как серия выборок кода. Для объяснений кода SLP, используемого в этом примере, см. RFC 2614 и документацию API для SLP.
public class Server { public final static int JMX_DEFAULT_LEASE = 300; public final static String JMX_SCOPE = "DEFAULT"; private final MBeanServer mbs; public Server() { mbs = MBeanServerFactory.createMBeanServer(); } [...]
ПРИМЕР КОДА 4-1 набор значение по умолчанию арендный договор SLP JMX_DEFAULT_LEASE к арендному договору значения по умолчанию относительно 300 секунд соответствуя отрезку времени URL будет зарегистрирован, и показывает начальное создание сервера MBean mbs.
В коде, который не показывают здесь, Вы тогда определяете рекламодателя SLP slpAdvertiser, и служба SLP URL url. slpAdvertiser используется, чтобы зарегистрировать службу URL в службе поиска SLP. SCOPE и agentName регистрируются в SLP как атрибуты поиска.
[...] public static void register(JMXServiceURL jmxUrl, String name) throws ServiceLocationException { ServiceURL serviceURL = new ServiceURL(jmxUrl.toString(), JMX_DEFAULT_LEASE); debug("ServiceType is: " + serviceURL.getServiceType()); Vector attributes = new Vector(); Vector attrValues = new Vector(); attrValues.add(JMX_SCOPE); ServiceLocationAttribute attr1 = new ServiceLocationAttribute("SCOPE", attrValues); attributes.add(attr1); attrValues.removeAllElements(); attrValues.add(name); ServiceLocationAttribute attr2 = new ServiceLocationAttribute("AgentName", attrValues); attributes.add(attr2); final Advertiser slpAdvertiser = ServiceLocationManager.getAdvertiser(Locale.US); slpAdvertiser.register(serviceURL, attributes); } [...]
ПРИМЕР КОДА 4-2 шоу регистрация сервера соединителя JMX URL со службой поиска SLP.
Служба JMX URL jmxUrl адрес сервера соединителя, и получается звонком getAddress() метод JMXConnectorServer когда сервер соединителя запускается.
Атрибуты поиска SLP, а именно, контекст и агент называют, под которым должен быть зарегистрирован адрес сервера соединителя (name), тогда определяются class SLP ServiceLocationAttribute. AgentName атрибут является обязательными, но другими дополнительными атрибутами, такой как ProtocolType, AgentHost, и Property может также быть зарегистрирован в службе поиска SLP.
Наконец, адрес сервера соединителя JMX регистрируется в службе SLP со звонком register() метод Advertiser интерфейс, с serviceURL и attributes переданный в как параметры.
[...] public JMXConnectorServer rmi(String url) throws IOException, JMException, NamingException, ClassNotFoundException, ServiceLocationException { JMXServiceURL jurl = new JMXServiceURL(url); final HashMap env = new HashMap(); // Environment map attributes [...] JMXConnectorServer rmis = JMXConnectorServerFactory.newJMXConnectorServer(jurl, env, mbs); final String agentName = System.getProperty("agent.name", "DefaultAgent"); start(rmis, agentName); return rmis; } [...]
ПРИМЕР КОДА 4-3 шоу создание сервера соединителя RMI. Служба JMX URL jurl создается из строки url это включается в команду, используемую, чтобы запуститься Server в командной строке. Сервер соединителя RMI называют rmis тогда создается с системными свойствами, определенными средой map и адрес jurl.
Сервер соединителя тогда запускается, и адрес сервера соединителя RMI регистрируется в службе поиска SLP под именем agentName.
[...] public void start(JMXConnectorServer server, String agentName) throws IOException, ServiceLocationException { server.start(); final JMXServiceURL address = server.getAddress(); register(address,agentName); } [...]
ПРИМЕР КОДА 4-4 шоу запуск сервера соединителя server и регистрация server в службе поиска SLP с данным адресом address.
Служба поиска SLP Client.java class показывают в ПРИМЕРЕ КОДА 4-1, ПРИМЕР КОДА 4-2, и ПРИМЕР КОДА 4-3:
public class Client { public final static String JMX_SCOPE = "DEFAULT"; public static Locator getLocator() throws ServiceLocationException { final Locator slpLocator = ServiceLocationManager.getLocator(Locale.US); return slpLocator; } public static List lookup(Locator slpLocator, String name) throws IOException, ServiceLocationException { final ArrayList list = new ArrayList(); Vector scopes = new Vector(); scopes.add(JMX_SCOPE); String query = "(&(AgentName=" + ((name!=null)?name:"*") + "))"; ServiceLocationEnumeration result = slpLocator.findServices(new ServiceType("service:jmx"), scopes, query); while(result.hasMoreElements()) { final ServiceURL surl = (ServiceURL) result.next(); JMXServiceURL jmxUrl = new JMXServiceURL(surl.toString()); try { JMXConnector client = JMXConnectorFactory.newJMXConnector(jmxUrl,null); if (client != null) list.add(client); } catch (IOException x ) { [...] } } } return list; }
ПРИМЕР КОДА 4-1 прежде всего получает службу SLP Locator вызывая getLocator метод class SLP ServiceLocationManager. Client тогда получает все серверы соединителя, зарегистрированные в службе SLP под данным именем агента, или под именами агента, которые соответствуют определенный образец. Если никакое имя агента не определяется когда Client запускается, все имена агента рассмотрят.
Технологическая служба JMX URL, jmxUrl, сгенерирован для каждого из агентов, полученных SLP, со службой каждого агента SLP URL, surl, переданный в качестве параметра в JMXServiceURL экземпляр. URL jmxUrl тогда передается к newJMXConnector() метод JMXConnectorFactory, создать новый названный клиент соединителя client для каждого агента, который регистрируется в службе SLP.
Клиенты соединителя получали, сохранены в вызванном списке массива list.
public static void listMBeans(MBeanServerConnection server) throws IOException { final Set names = server.queryNames(null,null); for (final Iterator i=names.iterator(); i.hasNext(); ) { ObjectName name = (ObjectName)i.next(); System.out.println("Got MBean: "+name); try { MBeanInfo info = server.getMBeanInfo((ObjectName)name); MBeanAttributeInfo[] attrs = info.getAttributes(); if (attrs == null) continue; for (int j=0; j<attrs.length; j++) { try { Object o = server.getAttribute(name,attrs[j].getName()); System.out.println("\t\t" + attrs[j].getName() + " = "+o); } catch (Exception x) { System.err.println("JmxClient failed to get " + attrs[j].getName() + x); x.printStackTrace(System.err); } } }
В ПРИМЕРЕ КОДА 4-2, ссылке на MBeanServerConnection получается для каждого клиента соединителя, который создается из адреса сервера соединителя, сохраненного в службе SLP. Список всего MBeans и их атрибутов получается.
public static void main(String[] args) { try { final String agentName = System.getProperty("agent.name"); final Locator slpLocator = getLocator(); List l = lookup(slpLocator,agentName); int j = 1; for (Iterator i=l.iterator();i.hasNext();j++) { JMXConnector c1 = (JMXConnector) i.next(); if (c1 != null) { try { c1.connect(env); } catch (IOException x) { System.err.println ("Connection failed: " + x); x.printStackTrace(System.err); continue; } MBeanServerConnection conn = c1.getMBeanServerConnection(); try { listMBeans(conn); } catch (IOException x) { x.printStackTrace(System.err); } try { c1.close(); } catch (IOException x) { x.printStackTrace(System.err); } } } } catch (Exception x) { x.printStackTrace(System.err); } }
В ПРИМЕРЕ КОДА 4-3, agent.name свойство получается, вызывая getProperty() метод System class, и служба поиска SLP находятся, вызывая getLocator() метод Locator.
Все агенты называют agentName тогда ищутся, и соединения делаются к обнаруженным агентам. Если никакой агент не определяется, то все агенты являются поиском. Соединения делаются к серверу MBean, создаваемому Server, и все MBeans в этом перечисляются, прежде, чем соединение закрывается.
В дополнение к действиям Вы выполняли в Разделе "Начальную Конфигурацию", прежде, чем можно будет выполнить примеры службы поиска, которые используют SLP, следует выполнить некоторые дальнейшие начальные действия, которые являются определенными для этого примера. Можно тогда начать искать соединители, используя SLP в соединении с этими двумя соединителями, поддерживаемыми технологией JMX.
Когда Вы выполняете примеры, чтобы помочь Вам отследить, из которых был создан агент, с которым транспортом, имена агента включают суффикс буквы, который является тем же самым как надписью соответствующего раздела. Например, агент от Раздела a. "Соединитель RMI по JRMP, без внешнего каталога" вызывают example-server-a.
Следующие шаги требуются всеми различными транспортами, которые можно выполнить в этом примере.
В дополнение к общим переменным окружения, которые были установлены в Разделе "Начальная Конфигурация", Вы должны добавить путь к службе SLP. Если Вы используете операционную среду Соляриса, добавьте следующую переменную:
$ SLPLIB =/usr/share/lib/slp
Если Вы используете другую платформу, набор SLPLIB соответственно для платформы Вы используете.
classp переменная окружения.
Этот пример требует пути к классу, который включает архив Java (JAR) файлы для SLP.
$ $SLPLIB/slp.jar classp=
Client и Server классы.
Введите следующую команду:
$ javac-d. - $classp пути к классу Server.java Client.java
Если Вы используете операционную среду Соляриса, введите следующую команду, которая требует, чтобы Вы знали свой пользовательский пароль высшего качества:
$ su базируются-c "java - $SLPLIB/slpd.jar CP com.sun.slp.slpd &"
Password: [введите пароль суперпользователя]
Если Вы не выполняете систему Соляриса, запустите демона SLP согласно реализации SLP, который Вы используете.
Этот пример демонстрирует использование службы поиска SLP, чтобы искать серверы соединителя RMI, которые используют транспорт значения по умолчанию RMI, JRMP, так же как транспорт IIOP. Кроме того, как описано в Разделе "Начальная Конфигурация", различные внешние каталоги используются, чтобы зарегистрировать тупики соединителя RMI.
Комбинации транспортов и внешних каталогов, демонстрируемых здесь:
Выполните следующие шаги, чтобы выполнить пример:
Server.
Команда Вы используете, чтобы запустить Server изменяется, согласно которому внешнему каталогу Вы используете. Можно запустить один или больше следующих экземпляров Server с различными транспортами и внешними реестрами прежде, чем запуститься Client.
Запустить Server вводя следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Dagent.name=example-server-a \ -Durl ="service:jmx:rmi://" \ slp.Server &
В этой команде:
debug устанавливается в истину обеспечить более полный экранный вывод когда Server выполненияexample-server-aКогда Сервер будет запущен, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе SLP.
Запустить Server вводя следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Dagent.name=example-server-b \ -Durl="service:jmx:rmi:///jndi/${jndirmi}/server" \ slp.Server &
В этой команде:
example-server-bКогда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе SLP.
Запустить Server вводя следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Dagent.name=example-server-c \ -Durl="service:jmx:rmi:///jndi/${jndildap}/cn=x,dc=Test" \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ slp.Server &
В этой команде:
example-server-cjndildap в Разделе "Начальная Конфигурация".Test компонент домена в сервере LDAP.principal и пароль credentials даются, чтобы получить доступ к серверу LDAP.Когда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе SLP под именем агента example-server-c.
Запустить Server вводя следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Dagent.name=example-server-d \ -Durl="service:jmx:iiop://" \ slp.Server &
В этой команде:
example-server-dКогда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его автоматически сгенерированного URL в службе SLP.
Запустить Server вводя следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Dagent.name=example-server-e \ -Durl="service:jmx:iiop:///jndi/${jndiiiop}/server" \ slp.Server &
В этой команде:
example-server-eserver сохранен CORBA именование службы, которую Вы идентифицировали как jndiiiop в Разделе "Начальная Конфигурация"Когда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе SLP под именем example-server-e.
Запустить Server вводя следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Dagent.name=example-server-f \ -Durl="service:jmx:iiop:///jndi/${jndildap}/cn=x,dc=Test" \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ slp.Server &
В этой команде:
example-server-fjndildap в Разделе "Начальная Конфигурация".Test компонент домена в сервере LDAP.principal и пароль credentials даются, чтобы получить доступ к серверу LDAP.Когда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе SLP под именем агента example-server-f.
Client.После запуска Server используя транспортный и внешний каталог Вашего выбора, запустите Client:
$ java -classpath .:$classp -Ddebug=true \
-Djava.naming.security.principal="$principal" \
-Djava.naming.security.credentials="$credentials" \
slp.Client
Вы будете видеть, что вывод подтверждает обнаружение агентов, создаваемых Server и зарегистрированный в службе поиска. Вы будете также видеть идентификацию и подтверждение соединения, сделанного к агентам.
Чтобы искать определенный агент, введите следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ -Dagent.name="agentName" \ slp.Client
В команде, показанной выше, agentName является именем агента, который Вы хотите искать. Можно также определить частичное имя агента при использовании *; например, x* для всех имен агента, начинающихся с буквы x.
Цель этого примера состоит в том, чтобы демонстрировать, как технологический клиент соединителя JMX может найти и соединиться с сервером соединителя, который зарегистрировался в службе поиска Jini. Этот пример выполняет следующие операции:
Пример службы поиска Jini содержится в каталоге work_dir/jmx_examples/Lookup/jini.
/jmx_examples/Lookup/jini каталог.
В этом каталоге Вы найдете следующие файлы:
Эти классы будут проанализированы в следующих разделах.
Следующие разделы анализируют каждый из классов, используемых в примере службы поиска Jini, и объясняют, как они выполняют операции, описанные выше.
Из-за его размера, службы поиска Jini Server.java class показывают как серия выборок кода.
public class Server { private final MBeanServer mbs; private static boolean debug = false; public Server() { mbs = MBeanServerFactory.createMBeanServer(); } [...]
ПРИМЕР КОДА 4-1 шоу создание сервера MBean mbs. Как имел место для примеров SLP, служба JMX, к URL и имени агента передают Server когда это запускается в командной строке.
[...] public JMXConnectorServer rmi(String url) throws IOException, JMException, ClassNotFoundException { JMXServiceURL jurl = new JMXServiceURL(url); final HashMap env = new HashMap(); // Environment map attributes [...] JMXConnectorServer rmis = JMXConnectorServerFactory.newJMXConnectorServer(jurl, env, mbs); final String agentName = System.getProperty("agent.name", "DefaultAgent"); start(rmis,env,agentName); return rmis; } [...]
ПРИМЕР КОДА 4-2 шоу создание сервера соединителя RMI называют rmis, использование системных свойств определяется картой среды env и адрес jurl.
Сервер соединителя RMI rmis запускается. Адрес сервера соединителя RMI регистрируется в службе поиска Jini под именем agentName.
[...] public void start(JMXConnectorServer server, Map env, String agentName) throws IOException, ClassNotFoundException { server.start(); final ServiceRegistrar registrar=getRegistrar(); final JMXConnector proxy = server.toJMXConnector(env); register(registrar,proxy,agentName); } public static ServiceRegistrar getRegistrar() throws IOException, ClassNotFoundException, MalformedURLException { final String jurl = System.getProperty("jini.lookup.url","jini://localhost"); final LookupLocator lookup = new LookupLocator(jurl); final ServiceRegistrar registrar = lookup.getRegistrar(); if (registrar instanceof Administrable) debug("Registry is administrable."); return registrar; } public static ServiceRegistration register(ServiceRegistrar registrar, JMXConnector proxy, String name) throws IOException { Entry[] serviceAttrs = new Entry[] { new net.jini.lookup.entry.Name(name) }; System.out.println("Registering proxy: AgentName=" + name ); debug("" + proxy); ServiceItem srvcItem = new ServiceItem(null, proxy, serviceAttrs); ServiceRegistration srvcRegistration = registrar.register(srvcItem, Lease.ANY); debug("Registered ServiceID: " + srvcRegistration.getServiceID().toString()); return srvcRegistration; } [...]
ПРИМЕР КОДА 4-3 шоу создание сервера соединителя называют server с картой среды env и служба URL jurl. Сервер экземпляра сервера соединителя тогда получает указатель на службу поиска Jini, вызывая метод службы поиска Jini LookupLocator.getRegistrar().
Сервер соединителя регистрируется в службе поиска Jini в форме прокси, используя локатор службы поиска Jini registrar и агент называет, под которым будет зарегистрирован сервер соединителя. Прокси является фактически клиентским тупиком для сервера соединителя, полученного звонком toJMXConnector() метод JMXConnectorServer.
Сама регистрация выполняется звонком register() метод службы поиска Jini class ServiceRegistrar, с массивом элементов службы.
Пример службы поиска Jini class Client.java показывается в ПРИМЕРЕ КОДА 4-1.
public class Client { private static boolean debug = false; public static ServiceRegistrar getRegistrar() throws IOException, ClassNotFoundException, MalformedURLException { final String jurl = System.getProperty("jini.lookup.url","jini://localhost"); final LookupLocator lookup = new LookupLocator(jurl); final ServiceRegistrar registrar = lookup.getRegistrar(); if (registrar instanceof Administrable) debug("Registry is administrable."); return registrar; } public static List lookup(ServiceRegistrar registrar, String name) throws IOException { final ArrayList list = new ArrayList(); final Class[] classes = new Class[] {JMXConnector.class}; final Entry[] serviceAttrs = new Entry[] { new net.jini.lookup.entry.Name(name) }; ServiceTemplate template = new ServiceTemplate(null,classes,serviceAttrs); ServiceMatches matches = registrar.lookup(template, Integer.MAX_VALUE); for(int i = 0; i < matches.totalMatches; i++) { debug("Found Service: " + matches.items[i].serviceID); if (debug) { if (matches.items[i].attributeSets != null) { final Entry[] attrs = matches.items[i].attributeSets; for (int j = 0; j < attrs.length ; j++) { debug("Attribute["+j+"]=" + attrs[j]); } } } if(matches.items[i].service != null) { JMXConnector c = (JMXConnector)(matches.items[i].service); debug("Found a JMXConnector: " + c); list.add(c); } } return list; } [...]
ПРИМЕР КОДА 4-1 шоу, как клиент соединителя получает указатель на службу поиска Jini со звонком lookup.getRegistrar(). Клиент тогда получает список соединителей, зарегистрированных как записи в службе поиска Jini с именем агента name. В отличие от этого в примере SLP, имя агента Вы передаете к Client то, когда это запускается, должно быть или точным совпадением существующего имени агента, или нулем, когда служба поиска Jini будет искать все агенты.
Как только список соединителей был получен в коде, который не показывают здесь, клиент соединяется с сервером MBean, запущенным Server, и получает список всего MBeans, зарегистрированного в этом.
java.policy файл является технологическим файлом политики безопасности Java, сконфигурированным для этого примера.
Шаблон Jini, объединяющий технологический файл свойств в сеть, чтобы быть сконфигурированным для этого примера. Измените @INSTALL_HOME_FOR_JINI и переименуйте файл к jini.properties.
В дополнение к действиям Вы выполняли в Разделе "Начальную Конфигурацию", прежде, чем можно будет выполнить примеры службы поиска, которые используют службу поиска Jini, следует выполнить некоторые дальнейшие начальные действия, которые являются определенными для этого примера. Можно тогда начать искать соединители, используя технологию сети Jini в соединении с соединителем, поддерживаемым технологией JMX.
Когда Вы выполняете примеры, чтобы помочь Вам отследить, из которых был создан агент, с которым транспортом, имена агента включают суффикс буквы, который является тем же самым как надписью соответствующего раздела. Например, агент от Раздела a. "Соединитель RMI по JRMP, без внешнего каталога." вызывается example-server-a.
Следующие шаги требуются всеми различными транспортами, которые можно выполнить в этом примере.
В дополнение к общим переменным окружения, что Вы устанавливаете в Разделе "Начальную Конфигурацию", можно добавить путь к службе поиска Jini. Каталог, где Вы установили Jini, объединяющий технологию в сеть, упоминается как jini_dir.
$ JINI_HOME=jini_dir
$ $JINI_HOME/lib JINILIB=
classp переменная окружения.
Этот пример требует файлов JAR для ядра служб поиска Jini и расширений.
$ classp=$JINILIB/jini-core.jar:$JINILIB/jini-ext.jar
jini.properties файл.
Файл свойств для платформ UNIX обеспечивается в том же самом каталоге как классы для этого примера. Если Вы не выполняете платформу UNIX, можно получить файл свойств для своей платформы в следующем каталоге:
$JINI_HOME/example/launcher/jini12_<platform>.properties
jini.properties файл.
Следует завершить файл, чтобы включать все необходимые пути, имена хоста и номера портов для Вашей системы. Даже если Вы не выполняете платформу UNIX, можно использовать шаблон, обеспеченный в качестве руководства.
StartService.
$ java - $JINILIB/jini-examples.jar CP com.sun.jini.example.launcher.StartService &
Это откроется StartService графический интерфейс пользователя.
jini.properties файл в StartService.
Щелкните 'по Файлу', ‘Открытый Файл свойств’ и затем выберите свой файл свойств изнутри work_dir/jmx_examples/Lookup/jini.
Запустите необходимые службы поиска Jini, щелкая по вкладке ‘Run’ и затем требуя у кнопки ‘START’ каждого следующего:
Вы будете видеть подтверждение, что службы работают.
Client и Server классы.
Введите следующую команду:
$
javac-d. - $classp пути к классу Server.java Client.java
Этот пример демонстрирует использование службы поиска Jini, чтобы искать серверы соединителя RMI, которые используют транспорт значения по умолчанию RMI, JRMP, так же как транспорт IIOP. Кроме того, как описано в Разделе "Начальная Конфигурация", различные внешние каталоги используются, чтобы зарегистрировать тупики соединителя RMI.
Комбинации транспортов и внешних каталогов, демонстрируемых здесь:
Server.
Команда Вы используете, чтобы запустить Server изменяется, согласно которому внешнему каталогу Вы используете. Можно запустить один или больше следующих экземпляров Server с различными транспортами и внешними реестрами прежде, чем запуститься Client.
Запустите Сервер, вводя следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Dagent.name=example-server-a \ -Durl="service:jmx:rmi://" \ -Djava.security.policy=java.policy \ jini.Server &
В этой команде:
debug устанавливается в true обеспечить более полный экранный вывод когда Server выполнения.example-server-a.Когда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе поиска Jini.
Запустите Сервер, вводя следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Dagent.name=example-server-b \ -Durl="service:jmx:rmi:///jndi/${jndirmi}/server" \ -Djava.security.policy=java.policy \ jini.Server &
В этой команде:
example-server-b.server, сохранен реестр RMI, который Вы идентифицировали как jndirmi в Разделе "Начальная Конфигурация".Когда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе поиска Jini.
Запустить Server вводя следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Dagent.name=example-server-c \ -Durl="service:jmx:rmi:///jndi/${jndildap}/cn=x,dc=Test" \ -Djava.security.policy=java.policy \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ jini.Server &
В этой команде:
example-server-cСлужба.The URL определяет выбранный соединитель как RMI по JRMP, и внешний каталог, в котором сохранен тупик соединителя RMI, является сервером LDAP, который Вы идентифицировали как jndildap в Разделе "Начальная Конфигурация".Test компонент домена в сервере LDAP.principal и пароль credentials даются, чтобы получить доступ к серверу LDAP.Когда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе поиска Jini под именем агента example-server-c.
Запустить Server вводя следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Dagent.name=example-server-d \ -Durl="service:jmx:iiop://" \ -Djava.security.policy=java.policy \ jini.Server &
В этой команде:
example-server-dКогда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его автоматически сгенерированного URL в службе поиска Jini.
Запустить Server вводя следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Dagent.name=example-server-e \ -Durl="service:jmx:iiop:///jndi/${jndiiiop}/server" \ -Djava.security.policy=java.policy \ jini.Server &
В этой команде:
example-server-e.server, сохранен CORBA именование службы, которую Вы идентифицировали как jndiiiop в Разделе "Начальная Конфигурация".Когда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе поиска Jini под именем example-server-e.
Запустите Сервер, вводя следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Dagent.name=example-server-f \ -Durl="service:jmx:iiop:///jndi/${jndildap}/cn=x,dc=Test" \ -Djava.security.policy=java.policy \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ jini.Server &
В этой команде:
example-server-f.jndildap в Разделе "Начальная Конфигурация".Test компонент домена в сервере LDAP.principal и пароль credentials даются, чтобы получить доступ к серверу LDAP.Когда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе поиска Jini под именем агента example-server-f.
Client.После запуска Server используя транспортный и внешний каталог Вашего выбора, запустите Client:
Вы будете видеть, что вывод подтверждает обнаружение агентов, создаваемых Server и зарегистрированный в службе поиска. Вы будете также видеть идентификацию и подтверждение соединения, сделанного к агентам.
Чтобы искать определенный агент, можно сделать так, вводя следующую команду:
$ java -classpath .:$classp -Ddebug=true \ -Djava.security.policy=java.policy \ -Dagent.name=agentName \ jini.Client
В команде, показанной выше, agentName является именем агента, который Вы хотите искать. Можно также определить частичное имя агента при использовании *; например, x* для всех имен агента, начинающихся с буквы x.
Технология JMX позволяет Вам регистрировать соединители RMI в службе поиска JNDI, используя реестр LDAP в качестве бэкэнда. Этот пример выполняет следующие операции:
Пример поиска JNDI/LDAP содержится в каталоге work_dir/jmx_examples/Lookup/ldap.
/jmx_examples/Lookup/ldap каталог.
В этом каталоге Вы найдете следующие файлы:
Эти классы будут проанализированы в следующих разделах.
Следующие разделы анализируют каждый из классов, используемых в примере службы поиска JNDI/LDAP, и объясняют, как они выполняют операции, описанные выше.
Из-за его размера, службы поиска JNDI/LDAP Server.java class показывают как серия выборок кода.
[...] public class Server { public final static int JMX_DEFAULT_LEASE = 60; private static boolean debug = false; private final MBeanServer mbs; public Server() { mbs = MBeanServerFactory.createMBeanServer(); } public static DirContext getRootContext() throws NamingException { final Hashtable env = new Hashtable(); final String factory = System.getProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); final String ldapServerUrl = System.getProperty(Context.PROVIDER_URL); final String ldapUser = System.getProperty(Context.SECURITY_PRINCIPAL, "cn=Directory Manager"); final String ldapPasswd = System.getProperty(Context.SECURITY_CREDENTIALS); debug(Context.PROVIDER_URL + "=" + ldapServerUrl); debug(Context.SECURITY_PRINCIPAL + "=" + ldapUser); if (debug) { System.out.print(Context.SECURITY_CREDENTIALS + "="); final int len = (ldapPasswd==null)?0:ldapPasswd.length(); for (int i=0;i<len;i++) System.out.print("*"); System.out.println(); } env.put(Context.INITIAL_CONTEXT_FACTORY,factory); env.put(Context.SECURITY_PRINCIPAL, ldapUser); if (ldapServerUrl != null) env.put(Context.PROVIDER_URL, ldapServerUrl); if (ldapPasswd != null) env.put(Context.SECURITY_CREDENTIALS, ldapPasswd); InitialContext root = new InitialLdapContext(env,null); return (DirContext)(root.lookup("")); } [...]
ПРИМЕР КОДА 4-1 шоу начальное создание сервера MBean mbs, и получение указателя на корневой контекст дерева каталогов LDAP, в котором должен быть зарегистрирован адрес сервера соединителя. Все соответствующие переменные доступа LDAP, такие как провайдер URL, имя пользователя LDAP и учетные данные безопасности, даются здесь и передаются в карту среды env. Карта среды env тогда передается в качестве параметра в звонок InitialLdapContext, из которого получается начальный контекст LDAP.
Код, который опускается от ПРИМЕРА КОДА 4-1, получает имя агента, под которым соединитель будет зарегистрирован в сервере LDAP.
[...] public static void register(DirContext root, JMXServiceURL jmxUrl, String name) throws NamingException, IOException { final String mydn = System.getProperty("dn","cn="+name); debug("dn: " + mydn ); Object o = null; try { o = root.lookup(mydn); } catch (NameNotFoundException n) { Attributes attrs = new BasicAttributes(); Attribute objclass = new BasicAttribute("objectClass"); objclass.add("top"); objclass.add("javaContainer"); objclass.add("jmxConnector"); attrs.put(objclass); attrs.put("jmxAgentName", name); o = root.createSubcontext(mydn,attrs); } if (o == null) throw new NameNotFoundException(); final Attributes attrs = root.getAttributes(mydn); final Attribute oc = attrs.get("objectClass"); if (!oc.contains("jmxConnector")) { final String msg = "The supplied node [" + mydn + "] does not contain the jmxConnector objectclass"; throw new NamingException(msg); } final Attributes newattrs = new BasicAttributes(); newattrs.put("jmxAgentName",name); newattrs.put("jmxServiceURL",jmxUrl.toString()); newattrs.put("jmxAgentHost",InetAddress.getLocalHost().getHostName()); newattrs.put("jmxProtocolType",jmxUrl.getProtocol()); newattrs.put("jmxExpirationDate", getExpirationDate(JMX_DEFAULT_LEASE)); root.modifyAttributes(mydn,DirContext.REPLACE_ATTRIBUTE,newattrs); } [...]
ПРИМЕР КОДА 4-2 шоу регистрация серверной службы соединителя JMX URL в каталоге LDAP. DN, где URL будет зарегистрирован, можно передать командной строке через dn Системное свойство, то есть, -Ddn=mydn (см. позже используемые команды, запускают сервер). Если dn Системное свойство не определяется, тогда можно использовать DN: cn=назовите, где имя agentName. Естественно, это не обязательно. Расположение, где URL регистрируется, действительно не имеет значения, потому что клиентский код никогда не использует это DN непосредственно, но вместо этого выполняет поиск LDAP, чтобы найти узлы, у которых есть вспомогательный глагол jmxConnector ObjectClass. Что важно, вот то, что каждый URL регистрируется в его собственном узле LDAP. То, как назвать эти узлы, оставляют администратору LDAP, который в этом случае является Вами. В этом примере предполагается, что Вы сконфигурировали свой сервер LDAP, создавая a root контекст тот, под который узел cn=имя может быть создано, и что это root контекст передали к начальному контексту LDAP через Context.PROVIDER_URL свойство (см. ПРИМЕР КОДА 4-1).
Код, показанный в ПРИМЕРЕ КОДА 4-2 проверки, существует ли узел, в котором Вы зарегистрируете сервер URL уже. Если это не делает, Вы пытаетесь создать это (это перестанет работать, если родительский узел не будет существовать). Начиная с jmxConnector ObjectClass простой вспомогательный class, Вы будете использовать javaContainer ObjectClass как структурный class, если Вы должны создать новый контекст. Еще раз это является абсолютно дополнительным. Любое структурное class ТО, к который jmxConnector вспомогательный class мог быть добавлен, будет приемлемым. Это тогда проверяет, имеет ли узел, в котором Вы зарегистрируете сервер уже, jmxConnector вспомогательный class. В противном случае исключение выдается.
В этой точке Вы уверены, что узел, в котором Вы зарегистрируете URL, существует, и имеет соответствующее jmxConnector вспомогательный class. Таким образом, Вы должны только заменить значения атрибутов, определенных JMX Удаленный API для поиска LDAP (см. jmx-schema.txt):
jmxServiceUrl: содержит String форма сервера URL, как получено из server.getAddress() после того, как сервер был запущенjmxAgentName: содержит имя агента JMXjmxProtocolType: содержит тип протокола JMX, как возвращено jmxUrl.getProtocolType()jmxAgentHost: содержит имя узла агентаjmxExpirationDate: содержит дату, в которой URL будут считать устаревшим.[...] public JMXConnectorServer rmi(String url) throws IOException, JMException, NamingException, ClassNotFoundException { JMXServiceURL jurl = new JMXServiceURL(url); final HashMap env = new HashMap(); // Prepare the environment Map [...] JMXConnectorServer rmis = JMXConnectorServerFactory.newJMXConnectorServer(jurl, env, mbs); final String agentName = System.getProperty("agent.name", "DefaultAgent"); start(rmis,env,agentName); return rmis; } [...]
В ПРИМЕРЕ КОДА 4-3, называют новый сервер соединителя RMI rmis создается со службой JMX URL jurl и соответствующие свойства LDAP, которые передают к его карте среды env. Сервер соединителя rmis запускается, вызывая JMXConnectorServer.start() и регистрируется в сервере LDAP.
[...] public void start(JMXConnectorServer server, Map env, String agentName) throws IOException, NamingException { server.start(); final DirContext root=getRootContext(); final JMXServiceURL address = server.getAddress(); register(root,address,agentName); } [...]
ПРИМЕР КОДА 4-4 шоу создание сервера соединителя JMX server, получение указателя на корневой каталог сервера LDAP root и создание URL для server именованный address. Корневой каталог, URL и имя агента передают как параметры к register() и регистрируются в сервере LDAP.
Служба поиска JNDI/LDAP Client.java class показывают в ПРИМЕРЕ КОДА 4-1.
[...] public class Client { private static boolean debug = false; public static void listAttributes(DirContext root, String dn) throws NamingException { final Attributes attrs = root.getAttributes(dn); System.out.println("dn: " + dn); System.out.println("attributes: " + attrs); } public static DirContext getRootContext() throws NamingException { final Hashtable env = new Hashtable(); // Prepare environment map [...] InitialContext root = new InitialLdapContext(env,null); return (DirContext)(root.lookup("")); } // Confirm URL has not expired [...] public static List lookup(DirContext root, String protocolType, String name) throws IOException, NamingException { final ArrayList list = new ArrayList(); String queryProtocol = (protocolType==null)?"":"(jmxProtocolType="+protocolType+")"; String query = "(&" + "(objectClass=jmxConnector) " + "(jmxServiceURL=*) " + queryProtocol + "(jmxAgentName=" + ((name!=null)?name:"*") + "))"; SearchControls ctrls = new SearchControls(); ctrls.setSearchScope(SearchControls.SUBTREE_SCOPE); final NamingEnumeration results = root.search("", query, ctrls); while (results.hasMore()) { final SearchResult r = (SearchResult) results.nextElement(); debug("Found node: " + r.getName()); final Attributes attrs = r.getAttributes(); final Attribute attr = attrs.get("jmxServiceURL"); if (attr == null) continue; final Attribute exp = attrs.get("jmxExpirationDate"); if ((exp != null) && hasExpired((String)exp.get())) { System.out.print(r.getName() + ": "); System.out.println("URL expired since: " + exp.get()); continue; } final String urlStr = (String)attr.get(); if (urlStr.length() == 0) continue; debug("Found URL: "+ urlStr); final JMXServiceURL url = new JMXServiceURL(urlStr); final JMXConnector conn = JMXConnectorFactory.newJMXConnector(url,null); list.add(conn); if (debug) listAttributes(root,r.getName()); } return list; } }
В ПРИМЕРЕ КОДА 4-1, Client во-первых возвращает указатель root к каталогу LDAP DirContext, тогда это перерывает каталог для классов объектов типа jmxConnector. Служба URL и атрибуты даты окончания срока действия, attr и exp соответственно, для jmxConnector классы объектов получаются, exp проверяется, чтобы удостовериться, что URL не истек, и вызов выполняется к JMXConnectorFactory создать новый соединитель conn. Соединитель conn добавляется к списку соединителей и используется, чтобы получить доступ к MBeans в сервере MBean, создаваемом Server.
jmx-schema.txt файл является файлом схемы LDAP для JMX Удаленный API.
60jmx-schema.ldif файл ldif файл, соответствующий файлу схемы LDAP, jmx-schema.txt, для технологии JMX. Если Вы используете Sun ОДИН Сервер каталогов, этот файл может быть скопирован непосредственно в config/schema каталог Sun ОДИН Сервер каталогов (см., что Раздел "Устанавливает Пример Службы Поиска JNDI/LDAP").
В дополнение к действиям Вы выполняли в Разделе "Начальную Конфигурацию", прежде, чем можно будет выполнить примеры службы поиска, которые используют службу поиска JNDI/LDAP, следует выполнить некоторые дальнейшие начальные действия, которые являются определенными для этого примера. Можно тогда начать искать соединители, используя сетевую технологию JNDI/LDAP в соединении с этими двумя соединителями, поддерживаемыми технологией JMX.
Когда Вы выполняете примеры, чтобы помочь Вам отследить, из которых был создан агент, с которым транспортом, имена агента включают суффикс буквы, который является тем же самым как надписью соответствующего раздела. Например, агент от Раздела a. "Соединитель RMI по JRMP, без внешнего каталога." вызывается example-server-a.
Следующие шаги требуются всеми различными комбинациями соединителя/транспорта, которые можно выполнить в этом примере.
Сделайте это согласно типу сервера LDAP, который Вы используете.
schema каталог.
Например, если бы Вы используете Sun ОДИН Сервер каталогов 5.0, Вы ввели бы:
$ cp 60jmx-schema.ldif/var/ds5/slapd-<имя узла>/config/schema
Иначе, сделайте это согласно типу сервера LDAP, который Вы используете.
Сделайте это согласно типу сервера LDAP, который Вы используете.
Server зарегистрирует его службу URL.
Следует обеспечить Server с путем к компонентному суффиксу домена dc=Test то, что Вы создали в Разделе "Начальную Конфигурацию".
$ провайдер = "ldap://$ldapport/dc=Test $ldaphost:"
Client и Server классы.
$
javac-d. Server.java Client.java
Этот пример демонстрирует использование службы поиска JNDI/LDAP, чтобы искать серверы соединителя RMI, которые используют транспорт значения по умолчанию RMI, JRMP, так же как транспорт IIOP. Кроме того, как описано в Разделе "Начальная Конфигурация", различные внешние каталоги используются, чтобы зарегистрировать тупики соединителя RMI.
Комбинации транспортов и внешних каталогов, демонстрируемых здесь:
Server.
Команда Вы используете, чтобы запустить Server изменяется, согласно которому внешнему каталогу Вы используете. Можно запустить один или больше следующих экземпляров Server с различными транспортами и внешними реестрами прежде, чем запуститься Client.
Запустить Server вводя следующую команду:
$ java -classpath . -Ddebug=true \ -Dagent.name=example-server-a \ -Durl="service:jmx:rmi://" \ -Djava.naming.provider.url="$provider" \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ jndi.Server &
В этой команде:
debug устанавливается в истину обеспечить более полный экранный вывод когда Server выполнения.example-server-a.provider, это указывает на компонентный суффикс домена, в котором будет зарегистрирован агент, дается.principal и пароль credentials даются, чтобы получить доступ к серверу LDAP.Когда Сервер будет запущен, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе поиска JNDI/LDAP.
Запустить Server вводя следующую команду:
$ java -classpath . -Ddebug=true \ -Dagent.name=example-server-b \ -Durl="service:jmx:rmi:///jndi/${jndirmi}/server" \ -Djava.naming.provider.url="$provider" \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ jndi.Server &
В этой команде:
example-server-b.provider, это указывает на компонентный суффикс домена, в котором будет зарегистрирован агент, дается.principal и пароль credentials даются, чтобы получить доступ к серверу LDAP.server, сохранен реестр RMI, который Вы идентифицировали как jndirmi в Разделе "Начальная Конфигурация".Когда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе поиска JNDI/LDAP.
Запустить Server вводя следующую команду:
$ java -classpath . -Ddebug=true \ -Dagent.name=example-server-c \ -Durl="service:jmx:rmi:///jndi/${jndildap}/cn=x,dc=Test" \ -Djava.naming.provider.url="$provider" \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ jndi.Server &
В этой команде:
example-server-c.provider, это указывает на компонентный суффикс домена, в котором будет зарегистрирован агент, дается.principal и пароль credentials даются, чтобы получить доступ к серверу LDAP.jndildap в Разделе "Начальная Конфигурация".Когда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе поиска JNDI/LDAP под именем агента example-server-c.
Запустить Server вводя следующую команду:
$ java -classpath . -Ddebug=true \ -Dagent.name=example-server-d \ -Durl="service:jmx:iiop://" \ -Djava.naming.provider.url="$provider" \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ jndi.Server &
В этой команде:
example-server-d.provider, это указывает на компонентный суффикс домена, в котором будет зарегистрирован агент, дается.principal и пароль credentials даются, чтобы получить доступ к серверу LDAP.Когда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его автоматически сгенерированного URL в службе поиска JNDI/LDAP.
Запустить Server вводя следующую команду:
$ java -classpath . -Ddebug=true \ -Dagent.name=example-server-e \ -Durl="service:jmx:iiop:///jndi/${jndiiiop}/server" \ -Djava.naming.provider.url="$provider" \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ jndi.Server &
В этой команде:
example-server-e.provider, это указывает на компонентный суффикс домена, в котором будет зарегистрирован агент, дается.principal и пароль credentials даются, чтобы получить доступ к серверу LDAP.jndiiiop в Разделе "Начальная Конфигурация".Когда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе поиска JNDI/LDAP под именем example-server-e.
Запустить Server вводя следующую команду:
$ java -classpath . -Ddebug=true \ -Dagent.name=example-server-f \ -Durl="service:jmx:iiop:///jndi/${jndildap}/cn=x,dc=Test" \ -Djava.naming.provider.url="$provider" \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ jndi.Server &
В этой команде:
example-server-f.provider, это указывает на компонентный суффикс домена, в котором будет зарегистрирован агент, дается.principal и пароль credentials даются, чтобы получить доступ к серверу LDAP.jndildap в Разделе "Начальная Конфигурация".Когда Server запускается, Вы будете видеть подтверждение создания соединителя RMI, и регистрацию его URL в службе поиска JNDI/LDAP под именем агента example-server-f.
Client.После запуска Server используя транспортный и внешний каталог Вашего выбора, запустите Client:
$ java -classpath . -Ddebug=true \ -Djava.naming.provider.url="$provider" \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ jndi.Client
Вы будете видеть, что вывод подтверждает обнаружение агентов, создаваемых Server и зарегистрированный в службе поиска. Вы будете также видеть идентификацию и подтверждение соединения, сделанного к агентам.
Чтобы искать определенный агент, введите следующую команду:
$ java -classpath . -Ddebug=true \
-Djava.naming.provider.url="$provider" \
-Djava.naming.security.principal="$principal" \
-Djava.naming.security.credentials="$credentials" \
-Dagent.name=agentName \
jndi.Client
В команде, показанной выше, agentName является именем агента, который Вы хотите искать. Можно также определить частичное имя агента при использовании *; например, x* для всех имен агента, начинающихся с буквы x.