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. Этот пример выполняет следующие операции:
Этот пример предполагает, что Вы уже знакомы с /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-c
jndildap
в Разделе "Начальная Конфигурация".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-e
server
сохранен 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-f
jndildap
в Разделе "Начальная Конфигурация".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.