# @(#)file README # @(#)author Sun Microsystems, Inc. # @(#)version 1.1 # @(#)lastedit 04/01/12 # # Copyright 2004 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # ============================================================================== # # Example of using JNDI/LDAP as Lookup service - registering and looking up # an RMI Connector (IIOP/JRMP) # # ============================================================================== # # Requirements: # # Before running this example you will have to: # --------------------------------------------- # # * Get access (or install & start) an LDAP directory server that # will implement the lookup service. # * Make sure the Java Schema (RFC 2713: http://www.ietf.org/rfc/rfc2713.txt) # is known by that server # * Update the directory server with JSR 160 LDAP Schema # - 60jmx-schema.ldif file provided # This ldif file corresponds to the schema described in jmx-schema.txt # and can be copied as is in the config/schema directory of # the Sun ONE Directory Server. # * Make sure you have write access to the server so that you can # create contexts in which the server will register its URL. # # The names used in this example make the assumption that you # have created a new suffix, a database, and a root node (e.g. dc=Test) # for the purpose of the example. You may however use any names / location # you want - just make sure to provide the correct names & URLs # when starting the Server and Client examples. # # In addition, if you wish to use an external directory for the RMI JMX # Connectors (URLs of the form jmx:service:[rmi|iiop]:/host:port/jndi/jndi-url) # then: # # o If you wish to use rmiregistry in conjunction with the RMI/JRMP # JMX Connector you will have to start a rmiregistry (see below). # # o If you wish to use CORBA Naming Service in conjunction with the RMI/IIOP # JMX Connector you will have to start an ORB daemon (see below). # # o If you wish to use LDAP in conjunction with the RMI JMX Connectors # you will have to install/setup a directory server (you can use the # same server than that used for Lookup, or another one) # # In order to compile and run the example, make a copy of this README file, and # then simply cut and paste all the commands as needed into a terminal window. # # This README makes the assumption that you are running under J2SE 1.5 on Unix, # you are familiar with the JMX technology, with LDAP and JNDI, and with # the bourne shell or korn shell syntax. # # All the commands below are defined using Unix korn shell syntax. # # If you are not running Unix and korn shell you are expected to be able to # adapt these commands to your favorite OS and shell environment. # #------------------------------------------------------------------------------- # The directory server must be started first. # On Solaris 9 you should first login as root and execute # the following commands: # Setup an LDAP server (you don't need to do this if the # server has already been configured). # /usr/sbin/directoryserver setup # Stop the server, copy the jmx schema, start the server # /usr/sbin/directoryserver stop cp 60jmx-schema.ldif /var/ds5/slapd-/config/schema /usr/sbin/directoryserver start # Start the console, and if needed create a new suffix, a database, # and a root node (e.g. dc=Test) # /usr/sbin/directoryserver startconsole # NOTE: if you're not using Solaris 9 Directory Server you will have # to make sure the Java Schema (RFC 2713: # http://www.ietf.org/rfc/rfc2713.txt) is known by that server #------------------------------------------------------------------------------- # Start an rmiregistry # rmiregistry 9999 & #------------------------------------------------------------------------------- # Start an ORB daemon: # rm -rf ./orb.db orbd -ORBInitialPort 7777 & #------------------------------------------------------------------------------- # Compile Server.java and Client.java # # * Server.java: creates an MBeanServer, creates and starts an # RMI connector (JRMP/IIOP) # * Client.java: lookup a connector in JNDI # list all MBeans. javac -d . Server.java Client.java #------------------------------------------------------------------------------- # LDAP parameters: # # Supply the appropriate hostname below, and define this variable: # ldaphost=gigondas # Supply the appropriate port number below, and define this variable: # ldapport=6666 # Supply the appropriate principal below, and define this variable: # principal="cn=Directory Manager" # Supply the appropriate credentials below, and define this variable: # credentials= # Supply the appropriate root under which the Server will try # to register its URL... # provider="ldap://$ldaphost:$ldapport/dc=Test" #------------------------------------------------------------------------------- # JNDI URLs # jndirmi="rmi://localhost:9999" jndiiiop="iiop://localhost:7777" jndildap="ldap://$ldaphost:$ldapport" #------------------------------------------------------------------------------- # JMX Service URLs # jmxiiopurl="service:jmx:iiop:///jndi/${jndiiiop}/server" jmxrmiurl="service:jmx:rmi:///jndi/${jndirmi}/server" jmxiiopldapurl="service:jmx:iiop:///jndi/${jndildap}/cn=x,dc=Test" jmxrmildapurl="service:jmx:rmi:///jndi/${jndildap}/cn=x,dc=Test" jmxstuburl="service:jmx:rmi://" jmxiorurl="service:jmx:iiop://" #------------------------------------------------------------------------------- # Below we illustrate the different JMX Connector Servers # which you have the choice to start. # There are seven cases labelled (a) to (f): # # * RMI Connectors # + over JRMP # - without any external directory (a) # - using rmiregistry as external directory (b) # - using LDAP as external directory (c) # + over IIOP # - without any external directory (d) # - using CORBA Naming Service as external directory (e) # - using LDAP as external directory (f) # NOTE-1: As defined in section 6.1 "Terminology" of the "JMX Remote API 1.0 # Specification" document, an agent is composed of one MBean Server and of # one or more Connector Servers. There can be several agents running in one JVM. # For flexibility of this example, the jndi.Server class creates an agent which # is composed of one MBean Server and of only one Connector Server. The class # jndi.Server decides which type of Connector Server to create depending on the # value given to the "url" system property when you start the example. # NOTE-2: The value of the "agent.name" system property is the value that the # jndi.Server class will give to the "AgentName" lookup attribute when it # registers the connector's URL in the lookup service. As defined in Table 6.1 # "Lookup attributes for connectors" of the "JMX Remote API 1.0 Specification" # document: the "AgentName" lookup attribute is a simple name used to identify # the *AGENT* to which the connector is attached. It makes it possible to # search, with a query to the lookup service, for all the connectors registered # by a given agent. # (a) You can start an agent with an RMI Connector Server over JRMP # without using any external directory # java -classpath . -Ddebug=true \ -Dagent.name=test-server-a \ -Durl="service:jmx:rmi://" \ -Djava.naming.provider.url="$provider" \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ jndi.Server & # (b) Or you can start an agent with an RMI Connector Server over JRMP # using rmiregistry as external directory # (Start rmiregistry first, if not yet started) # java -classpath . -Ddebug=true \ -Dagent.name=test-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 & # (c) Or you can start an agent with an RMI Connector Server over JRMP # using LDAP as external directory # (First start an LDAP server and create the dc=Test suffix) # java -classpath . -Ddebug=true \ -Dagent.name=test-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 & # (d) Or you can start an agent with an RMI Connector Server over IIOP # without using any external directory # java -classpath . -Ddebug=true \ -Dagent.name=test-server-d \ -Durl="service:jmx:iiop://" \ -Djava.naming.provider.url="$provider" \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ jndi.Server & # (e) Or you can start an agent with an RMI Connector Server over IIOP # using CORBA Naming Service as external directory # (Start ORBD first if not yet started). # java -classpath . -Ddebug=true \ -Dagent.name=test-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 & # (f) Or you can start an agent with an RMI Connector Server over IIOP # using LDAP as external directory # (First start an LDAP server and create the dc=Test suffix) # java -classpath . -Ddebug=true \ -Dagent.name=test-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 & # Once you have started one or more agents, you can start the Client. # java -classpath . -Ddebug=true \ -Djava.naming.provider.url="$provider" \ -Djava.naming.security.principal="$principal" \ -Djava.naming.security.credentials="$credentials" \ jndi.Client #-------------------------------------------------------------------------------