8332071: Convert package.html files in java.management.rmi
to package-info.java
8332376: Add `@since` tags to `java.management.rmi` Reviewed-by: kevinw, rriggs
This commit is contained in:
parent
afed7d0b05
commit
a0c5714dbc
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -102,21 +102,23 @@ public class RMIConnectorServer extends JMXConnectorServer {
|
||||
"jmx.remote.rmi.server.socket.factory";
|
||||
|
||||
/**
|
||||
* Name of the attribute that specifies an
|
||||
* {@link ObjectInputFilter} pattern string to filter classes acceptable
|
||||
* for {@link RMIServer#newClient(java.lang.Object) RMIServer.newClient()}
|
||||
* remote method call.
|
||||
* <p>
|
||||
* The filter pattern must be in same format as used in
|
||||
* {@link java.io.ObjectInputFilter.Config#createFilter}
|
||||
* <p>
|
||||
* This list of classes allowed by filter should correspond to the
|
||||
* transitive closure of the credentials class (or classes) used by the
|
||||
* installed {@linkplain JMXAuthenticator} associated with the
|
||||
* {@linkplain RMIServer} implementation.
|
||||
* If the attribute is not set then any class is deemed acceptable.
|
||||
* @see ObjectInputFilter
|
||||
*/
|
||||
* Name of the attribute that specifies an
|
||||
* {@link ObjectInputFilter} pattern string to filter classes acceptable
|
||||
* for {@link RMIServer#newClient(java.lang.Object) RMIServer.newClient()}
|
||||
* remote method call.
|
||||
* <p>
|
||||
* The filter pattern must be in same format as used in
|
||||
* {@link java.io.ObjectInputFilter.Config#createFilter}
|
||||
* <p>
|
||||
* This list of classes allowed by filter should correspond to the
|
||||
* transitive closure of the credentials class (or classes) used by the
|
||||
* installed {@linkplain JMXAuthenticator} associated with the
|
||||
* {@linkplain RMIServer} implementation.
|
||||
* If the attribute is not set then any class is deemed acceptable.
|
||||
* @see ObjectInputFilter
|
||||
*
|
||||
* @since 10
|
||||
*/
|
||||
public static final String CREDENTIALS_FILTER_PATTERN =
|
||||
"jmx.remote.rmi.server.credentials.filter.pattern";
|
||||
|
||||
@ -152,6 +154,8 @@ public class RMIConnectorServer extends JMXConnectorServer {
|
||||
* an allow-list that is too narrow or a reject-list that is too wide may
|
||||
* prevent legitimate clients from interoperating with the
|
||||
* {@code JMXConnectorServer}.
|
||||
*
|
||||
* @since 10
|
||||
*/
|
||||
public static final String SERIAL_FILTER_PATTERN =
|
||||
"jmx.remote.rmi.server.serial.filter.pattern";
|
||||
|
@ -0,0 +1,326 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* <p>The RMI connector is a connector for the JMX Remote API that
|
||||
* uses RMI to transmit client requests to a remote MBean server.
|
||||
* This package defines the classes that the user of an RMI
|
||||
* connector needs to reference directly, for both the client and
|
||||
* server sides. It also defines certain classes that the user
|
||||
* will not usually reference directly, but that must be defined so
|
||||
* that different implementations of the RMI connector can
|
||||
* interoperate.</p>
|
||||
*
|
||||
* <p>The RMI connector supports the JRMP transport for RMI.</p>
|
||||
*
|
||||
* <p>Like most connectors in the JMX Remote API, an RMI connector
|
||||
* usually has an address, which
|
||||
* is a {@link javax.management.remote.JMXServiceURL
|
||||
* JMXServiceURL}. The protocol part of this address is
|
||||
* <code>rmi</code> for a connector that uses the default RMI
|
||||
* transport (JRMP).</p>
|
||||
*
|
||||
* <p>There are two forms for RMI connector addresses:</p>
|
||||
*
|
||||
* <ul>
|
||||
* <li>
|
||||
* In the <em>JNDI form</em>, the URL indicates <em>where to find
|
||||
* an RMI stub for the connector</em>. This RMI stub is a Java
|
||||
* object of type {@link javax.management.remote.rmi.RMIServer
|
||||
* RMIServer} that gives remote access to the connector server.
|
||||
* With this address form, the RMI stub is obtained from an
|
||||
* external directory entry included in the URL. An external
|
||||
* directory is any directory recognized by {@link javax.naming
|
||||
* JNDI}, typically the RMI registry, LDAP, or COS Naming.
|
||||
*
|
||||
* <li>
|
||||
* In the <em>encoded form</em>, the URL directly includes the
|
||||
* information needed to connect to the connector server. When
|
||||
* using RMI/JRMP, the encoded form is the serialized RMI stub
|
||||
* for the server object, encoded using BASE64 without embedded
|
||||
* newlines.
|
||||
* </ul>
|
||||
*
|
||||
* <p>Addresses are covered in more detail below.</p>
|
||||
*
|
||||
*
|
||||
* <h2>Creating an RMI connector server</h2>
|
||||
*
|
||||
* <p>The usual way to create an RMI connector server is to supply an
|
||||
* RMI connector address to the method {@link
|
||||
* javax.management.remote.JMXConnectorServerFactory#newJMXConnectorServer
|
||||
* JMXConnectorServerFactory.newJMXConnectorServer}. The MBean
|
||||
* server to which the connector server is attached can be
|
||||
* specified as a parameter to that method. Alternatively, the
|
||||
* connector server can be registered as an MBean in that MBean
|
||||
* server.</p>
|
||||
*
|
||||
* <p>An RMI connector server can also be created by constructing an
|
||||
* instance of {@link
|
||||
* javax.management.remote.rmi.RMIConnectorServer
|
||||
* RMIConnectorServer}, explicitly or through the MBean server's
|
||||
* <code>createMBean</code> method.</p>
|
||||
*
|
||||
* <h3>Choosing the RMI transport</h3>
|
||||
*
|
||||
* <p>You can choose the RMI transport by specifying
|
||||
* <code>rmi</code> in the <code><em>protocol</em></code> part of the
|
||||
* <code>serviceURL</code> when creating the connector server. You
|
||||
* can also create specialized connector servers by instantiating
|
||||
* an appropriate subclass of {@link
|
||||
* javax.management.remote.rmi.RMIServerImpl RMIServerImpl} and
|
||||
* supplying it to the <code>RMIConnectorServer</code>
|
||||
* constructor.</p>
|
||||
*
|
||||
*
|
||||
* <h3><a id="servergen">Connector addresses generated by the
|
||||
* server</a></h3>
|
||||
*
|
||||
* <p>If the <code>serviceURL</code> you specify has an empty URL
|
||||
* path (after the optional host and port), or if you do not
|
||||
* specify a <code>serviceURL</code>, then the connector server
|
||||
* will fabricate a new <code>JMXServiceURL</code> that clients can
|
||||
* use to connect:</p>
|
||||
*
|
||||
* <ul>
|
||||
*
|
||||
* <li><p>If the <code>serviceURL</code> looks like:</p>
|
||||
*
|
||||
* <pre>
|
||||
* <code>service:jmx:rmi://<em>host</em>:<em>port</em></code>
|
||||
* </pre>
|
||||
*
|
||||
* <p>then the connector server will generate an {@link
|
||||
* javax.management.remote.rmi.RMIJRMPServerImpl
|
||||
* RMIJRMPServerImpl} and the returned <code>JMXServiceURL</code>
|
||||
* looks like:</p>
|
||||
*
|
||||
* <pre>
|
||||
* <code>service:jmx:rmi://<em>host</em>:<em>port</em>/stub/<em>XXXX</em></code>
|
||||
* </pre>
|
||||
*
|
||||
* <p>where <code><em>XXXX</em></code> is the serialized form of the
|
||||
* stub for the generated object, encoded in BASE64 without
|
||||
* newlines.</p>
|
||||
*
|
||||
* <li><p>If there is no <code>serviceURL</code>, there must be a
|
||||
* user-provided <code>RMIServerImpl</code>. The connector server
|
||||
* will generate a <code>JMXServiceURL</code> using the <code>rmi</code>
|
||||
* form.</p>
|
||||
*
|
||||
* </ul>
|
||||
*
|
||||
* <p>The <code><em>host</em></code> in a user-provided
|
||||
* <code>serviceURL</code> is optional. If present, it is copied
|
||||
* into the generated <code>JMXServiceURL</code> but otherwise
|
||||
* ignored. If absent, the generated <code>JXMServiceURL</code>
|
||||
* will have the local host name.</p>
|
||||
*
|
||||
* <p>The <code><em>port</em></code> in a user-provided
|
||||
* <code>serviceURL</code> is also optional. If present, it is
|
||||
* also copied into the generated <code>JMXServiceURL</code>;
|
||||
* otherwise, the generated <code>JMXServiceURL</code> has no port.
|
||||
* For an <code>serviceURL</code> using the <code>rmi</code>
|
||||
* protocol, the <code><em>port</em></code>, if present, indicates
|
||||
* what port the generated remote object should be exported on. It
|
||||
* has no other effect.</p>
|
||||
*
|
||||
* <p>If the user provides an <code>RMIServerImpl</code> rather than a
|
||||
* <code>JMXServiceURL</code>, then the generated
|
||||
* <code>JMXServiceURL</code> will have the local host name in its
|
||||
* <code><em>host</em></code> part and no
|
||||
* <code><em>port</em></code>.</p>
|
||||
*
|
||||
*
|
||||
* <h3><a id="directory">Connector addresses based on directory
|
||||
* entries</a></h3>
|
||||
*
|
||||
* <p>As an alternative to the generated addresses just described,
|
||||
* the <code>serviceURL</code> address supplied when creating a
|
||||
* connector server can specify a <em>directory address</em> in
|
||||
* which to store the provided or generated <code>RMIServer</code>
|
||||
* stub. This directory address is then used by both client and
|
||||
* server.</p>
|
||||
*
|
||||
* <p>In this case, the <code>serviceURL</code> has the following form:</p>
|
||||
*
|
||||
* <pre>
|
||||
* <code>service:jmx:rmi://<em>host</em>:<em>port</em>/jndi/<em>jndi-name</em></code>
|
||||
* </pre>
|
||||
*
|
||||
* <p>Here, <code><em>jndi-name</em></code> is a string that can be
|
||||
* supplied to {@link javax.naming.InitialContext#bind
|
||||
* javax.naming.InitialContext.bind}.</p>
|
||||
*
|
||||
* <p>As usual, the <code><em>host</em></code> and
|
||||
* <code>:<em>port</em></code> can be omitted.</p>
|
||||
*
|
||||
* <p>The connector server will generate an
|
||||
* <code>RMIServerImpl</code> based on the protocol
|
||||
* (<code>rmi</code>) and the <code><em>port</em></code> if any. When
|
||||
* the connector server is started, it will derive a stub from this
|
||||
* object using its {@link
|
||||
* javax.management.remote.rmi.RMIServerImpl#toStub toStub} method
|
||||
* and store the object using the given
|
||||
* <code><em>jndi-name</em></code>. The properties defined by the
|
||||
* JNDI API are consulted as usual.</p>
|
||||
*
|
||||
* <p>For example, if the <code>JMXServiceURL</code> is:
|
||||
*
|
||||
* <pre>
|
||||
* <code>service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname</code>
|
||||
* </pre>
|
||||
*
|
||||
* then the connector server will generate an
|
||||
* <code>RMIJRMPServerImpl</code> and store its stub using the JNDI
|
||||
* name
|
||||
*
|
||||
* <pre>
|
||||
* <code>rmi://myhost/myname</code>
|
||||
* </pre>
|
||||
*
|
||||
* which means entry <code>myname</code> in the RMI registry
|
||||
* running on the default port of host <code>myhost</code>. Note
|
||||
* that the RMI registry only allows registration from the local
|
||||
* host. So, in this case, <code>myhost</code> must be the name
|
||||
* (or a name) of the host that the connector server is running
|
||||
* on.
|
||||
*
|
||||
* <p>In this <code>JMXServiceURL</code>, the first <code>rmi:</code>
|
||||
* specifies the RMI
|
||||
* connector, while the second <code>rmi:</code> specifies the RMI
|
||||
* registry.
|
||||
*
|
||||
* <p>As another example, if the <code>JMXServiceURL</code> is:
|
||||
*
|
||||
* <pre>
|
||||
* <code>service:jmx:rmi://ignoredhost/jndi/ldap://dirhost:9999/cn=this,ou=that</code>
|
||||
* </pre>
|
||||
*
|
||||
* then the connector server will generate an
|
||||
* <code>RMIJRMPServerImpl</code> and store its stub using the JNDI
|
||||
* name
|
||||
*
|
||||
* <pre>
|
||||
* <code>ldap://dirhost:9999/cn=this,ou=that</code>
|
||||
* </pre>
|
||||
*
|
||||
* which means entry <code>cn=this,ou=that</code> in the LDAP
|
||||
* directory running on port 9999 of host <code>dirhost</code>.
|
||||
*
|
||||
* <p>If the <code>JMXServiceURL</code> is:
|
||||
*
|
||||
* <pre>
|
||||
* <code>service:jmx:rmi://ignoredhost/jndi/cn=this,ou=that</code>
|
||||
* </pre>
|
||||
*
|
||||
* then the connector server will generate an
|
||||
* <code>RMIJRMPServerImpl</code> and store its stub using the JNDI
|
||||
* name
|
||||
*
|
||||
* <pre>
|
||||
* <code>cn=this,ou=that</code>
|
||||
* </pre>
|
||||
*
|
||||
* For this case to work, the JNDI API must have been configured
|
||||
* appropriately to supply the information about what directory to
|
||||
* use.
|
||||
*
|
||||
* <p>In these examples, the host name <code>ignoredhost</code> is
|
||||
* not used by the connector server or its clients. It can be
|
||||
* omitted, for example:</p>
|
||||
*
|
||||
* <pre>
|
||||
* <code>service:jmx:rmi:///jndi/cn=this,ou=that</code>
|
||||
* </pre>
|
||||
*
|
||||
* <p>However, it is good practice to use the name of the host
|
||||
* where the connector server is running. This is often different
|
||||
* from the name of the directory host.</p>
|
||||
*
|
||||
*
|
||||
* <h3>Connector server attributes</h3>
|
||||
*
|
||||
* <p>When using the default JRMP transport, RMI socket factories can
|
||||
* be specified using the attributes
|
||||
* <code>jmx.remote.rmi.client.socket.factory</code> and
|
||||
* <code>jmx.remote.rmi.server.socket.factory</code> in the
|
||||
* <code>environment</code> given to the
|
||||
* <code>RMIConnectorServer</code> constructor. The values of these
|
||||
* attributes must be of type {@link
|
||||
* java.rmi.server.RMIClientSocketFactory} and {@link
|
||||
* java.rmi.server.RMIServerSocketFactory}, respectively. These
|
||||
* factories are used when creating the RMI objects associated with
|
||||
* the connector.</p>
|
||||
*
|
||||
* <h2>Creating an RMI connector client</h2>
|
||||
*
|
||||
* <p>An RMI connector client is usually constructed using {@link
|
||||
* javax.management.remote.JMXConnectorFactory}, with a
|
||||
* <code>JMXServiceURL</code> that has <code>rmi</code> as its protocol.</p>
|
||||
*
|
||||
* <p>If the <code>JMXServiceURL</code> was generated by the server,
|
||||
* as described above under <a href="#servergen">"connector
|
||||
* addresses generated by the server"</a>, then the client will
|
||||
* need to obtain it directly or indirectly from the server.
|
||||
* Typically, the server makes the <code>JMXServiceURL</code>
|
||||
* available by storing it in a file or a lookup service.</p>
|
||||
*
|
||||
* <p>If the <code>JMXServiceURL</code> uses the directory syntax, as
|
||||
* described above under <a href="#directory">"connector addresses
|
||||
* based on directory entries"</a>, then the client may obtain it
|
||||
* as just explained, or client and server may both know the
|
||||
* appropriate directory entry to use. For example, if the
|
||||
* connector server for the Whatsit agent uses the entry
|
||||
* <code>whatsit-agent-connector</code> in the RMI registry on host
|
||||
* <code>myhost</code>, then client and server can both know
|
||||
* that the appropriate <code>JMXServiceURL</code> is:</p>
|
||||
*
|
||||
* <pre>
|
||||
* <code>service:jmx:rmi:///jndi/rmi://myhost/whatsit-agent-connector</code>
|
||||
* </pre>
|
||||
*
|
||||
* <p>If you have an RMI stub of type {@link
|
||||
* javax.management.remote.rmi.RMIServer RMIServer}, you can
|
||||
* construct an RMI connection directly by using the appropriate
|
||||
* constructor of {@link javax.management.remote.rmi.RMIConnector
|
||||
* RMIConnector}.</p>
|
||||
*
|
||||
* <h2>Dynamic code downloading</h2>
|
||||
*
|
||||
* <p>If an RMI connector client or server receives from its peer an
|
||||
* instance of a class that it does not know, and if dynamic code
|
||||
* downloading is active for the RMI connection, then the class can
|
||||
* be downloaded from a codebase specified by the peer.
|
||||
* {@extLink rmi_guide Java RMI Guide} explains this in more detail.</p>
|
||||
*
|
||||
* @see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045,
|
||||
* section 6.8, "Base64 Content-Transfer-Encoding"</a>
|
||||
*
|
||||
*
|
||||
* @since 1.5
|
||||
*
|
||||
*/
|
||||
package javax.management.remote.rmi;
|
@ -1,329 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>RMI connector</title>
|
||||
<!--
|
||||
Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
|
||||
This code is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License version 2 only, as
|
||||
published by the Free Software Foundation. Oracle designates this
|
||||
particular file as subject to the "Classpath" exception as provided
|
||||
by Oracle in the LICENSE file that accompanied this code.
|
||||
|
||||
This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
version 2 for more details (a copy is included in the LICENSE file that
|
||||
accompanied this code).
|
||||
|
||||
You should have received a copy of the GNU General Public License version
|
||||
2 along with this work; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
or visit www.oracle.com if you need additional information or have any
|
||||
questions.
|
||||
-->
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
<p>The RMI connector is a connector for the JMX Remote API that
|
||||
uses RMI to transmit client requests to a remote MBean server.
|
||||
This package defines the classes that the user of an RMI
|
||||
connector needs to reference directly, for both the client and
|
||||
server sides. It also defines certain classes that the user
|
||||
will not usually reference directly, but that must be defined so
|
||||
that different implementations of the RMI connector can
|
||||
interoperate.</p>
|
||||
|
||||
<p>The RMI connector supports the JRMP transport for RMI.</p>
|
||||
|
||||
<p>Like most connectors in the JMX Remote API, an RMI connector
|
||||
usually has an address, which
|
||||
is a {@link javax.management.remote.JMXServiceURL
|
||||
JMXServiceURL}. The protocol part of this address is
|
||||
<code>rmi</code> for a connector that uses the default RMI
|
||||
transport (JRMP).</p>
|
||||
|
||||
<p>There are two forms for RMI connector addresses:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
In the <em>JNDI form</em>, the URL indicates <em>where to find
|
||||
an RMI stub for the connector</em>. This RMI stub is a Java
|
||||
object of type {@link javax.management.remote.rmi.RMIServer
|
||||
RMIServer} that gives remote access to the connector server.
|
||||
With this address form, the RMI stub is obtained from an
|
||||
external directory entry included in the URL. An external
|
||||
directory is any directory recognized by {@link javax.naming
|
||||
JNDI}, typically the RMI registry, LDAP, or COS Naming.
|
||||
|
||||
<li>
|
||||
In the <em>encoded form</em>, the URL directly includes the
|
||||
information needed to connect to the connector server. When
|
||||
using RMI/JRMP, the encoded form is the serialized RMI stub
|
||||
for the server object, encoded using BASE64 without embedded
|
||||
newlines.
|
||||
</ul>
|
||||
|
||||
<p>Addresses are covered in more detail below.</p>
|
||||
|
||||
|
||||
<h2>Creating an RMI connector server</h2>
|
||||
|
||||
<p>The usual way to create an RMI connector server is to supply an
|
||||
RMI connector address to the method {@link
|
||||
javax.management.remote.JMXConnectorServerFactory#newJMXConnectorServer
|
||||
JMXConnectorServerFactory.newJMXConnectorServer}. The MBean
|
||||
server to which the connector server is attached can be
|
||||
specified as a parameter to that method. Alternatively, the
|
||||
connector server can be registered as an MBean in that MBean
|
||||
server.</p>
|
||||
|
||||
<p>An RMI connector server can also be created by constructing an
|
||||
instance of {@link
|
||||
javax.management.remote.rmi.RMIConnectorServer
|
||||
RMIConnectorServer}, explicitly or through the MBean server's
|
||||
<code>createMBean</code> method.</p>
|
||||
|
||||
<h3>Choosing the RMI transport</h3>
|
||||
|
||||
<p>You can choose the RMI transport by specifying
|
||||
<code>rmi</code> in the <code><em>protocol</em></code> part of the
|
||||
<code>serviceURL</code> when creating the connector server. You
|
||||
can also create specialized connector servers by instantiating
|
||||
an appropriate subclass of {@link
|
||||
javax.management.remote.rmi.RMIServerImpl RMIServerImpl} and
|
||||
supplying it to the <code>RMIConnectorServer</code>
|
||||
constructor.</p>
|
||||
|
||||
|
||||
<h3><a id="servergen">Connector addresses generated by the
|
||||
server</a></h3>
|
||||
|
||||
<p>If the <code>serviceURL</code> you specify has an empty URL
|
||||
path (after the optional host and port), or if you do not
|
||||
specify a <code>serviceURL</code>, then the connector server
|
||||
will fabricate a new <code>JMXServiceURL</code> that clients can
|
||||
use to connect:</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><p>If the <code>serviceURL</code> looks like:</p>
|
||||
|
||||
<pre>
|
||||
<code>service:jmx:rmi://<em>host</em>:<em>port</em></code>
|
||||
</pre>
|
||||
|
||||
<p>then the connector server will generate an {@link
|
||||
javax.management.remote.rmi.RMIJRMPServerImpl
|
||||
RMIJRMPServerImpl} and the returned <code>JMXServiceURL</code>
|
||||
looks like:</p>
|
||||
|
||||
<pre>
|
||||
<code>service:jmx:rmi://<em>host</em>:<em>port</em>/stub/<em>XXXX</em></code>
|
||||
</pre>
|
||||
|
||||
<p>where <code><em>XXXX</em></code> is the serialized form of the
|
||||
stub for the generated object, encoded in BASE64 without
|
||||
newlines.</p>
|
||||
|
||||
<li><p>If there is no <code>serviceURL</code>, there must be a
|
||||
user-provided <code>RMIServerImpl</code>. The connector server
|
||||
will generate a <code>JMXServiceURL</code> using the <code>rmi</code>
|
||||
form.</p>
|
||||
|
||||
</ul>
|
||||
|
||||
<p>The <code><em>host</em></code> in a user-provided
|
||||
<code>serviceURL</code> is optional. If present, it is copied
|
||||
into the generated <code>JMXServiceURL</code> but otherwise
|
||||
ignored. If absent, the generated <code>JXMServiceURL</code>
|
||||
will have the local host name.</p>
|
||||
|
||||
<p>The <code><em>port</em></code> in a user-provided
|
||||
<code>serviceURL</code> is also optional. If present, it is
|
||||
also copied into the generated <code>JMXServiceURL</code>;
|
||||
otherwise, the generated <code>JMXServiceURL</code> has no port.
|
||||
For an <code>serviceURL</code> using the <code>rmi</code>
|
||||
protocol, the <code><em>port</em></code>, if present, indicates
|
||||
what port the generated remote object should be exported on. It
|
||||
has no other effect.</p>
|
||||
|
||||
<p>If the user provides an <code>RMIServerImpl</code> rather than a
|
||||
<code>JMXServiceURL</code>, then the generated
|
||||
<code>JMXServiceURL</code> will have the local host name in its
|
||||
<code><em>host</em></code> part and no
|
||||
<code><em>port</em></code>.</p>
|
||||
|
||||
|
||||
<h3><a id="directory">Connector addresses based on directory
|
||||
entries</a></h3>
|
||||
|
||||
<p>As an alternative to the generated addresses just described,
|
||||
the <code>serviceURL</code> address supplied when creating a
|
||||
connector server can specify a <em>directory address</em> in
|
||||
which to store the provided or generated <code>RMIServer</code>
|
||||
stub. This directory address is then used by both client and
|
||||
server.</p>
|
||||
|
||||
<p>In this case, the <code>serviceURL</code> has the following form:</p>
|
||||
|
||||
<pre>
|
||||
<code>service:jmx:rmi://<em>host</em>:<em>port</em>/jndi/<em>jndi-name</em></code>
|
||||
</pre>
|
||||
|
||||
<p>Here, <code><em>jndi-name</em></code> is a string that can be
|
||||
supplied to {@link javax.naming.InitialContext#bind
|
||||
javax.naming.InitialContext.bind}.</p>
|
||||
|
||||
<p>As usual, the <code><em>host</em></code> and
|
||||
<code>:<em>port</em></code> can be omitted.</p>
|
||||
|
||||
<p>The connector server will generate an
|
||||
<code>RMIServerImpl</code> based on the protocol
|
||||
(<code>rmi</code>) and the <code><em>port</em></code> if any. When
|
||||
the connector server is started, it will derive a stub from this
|
||||
object using its {@link
|
||||
javax.management.remote.rmi.RMIServerImpl#toStub toStub} method
|
||||
and store the object using the given
|
||||
<code><em>jndi-name</em></code>. The properties defined by the
|
||||
JNDI API are consulted as usual.</p>
|
||||
|
||||
<p>For example, if the <code>JMXServiceURL</code> is:
|
||||
|
||||
<pre>
|
||||
<code>service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname</code>
|
||||
</pre>
|
||||
|
||||
then the connector server will generate an
|
||||
<code>RMIJRMPServerImpl</code> and store its stub using the JNDI
|
||||
name
|
||||
|
||||
<pre>
|
||||
<code>rmi://myhost/myname</code>
|
||||
</pre>
|
||||
|
||||
which means entry <code>myname</code> in the RMI registry
|
||||
running on the default port of host <code>myhost</code>. Note
|
||||
that the RMI registry only allows registration from the local
|
||||
host. So, in this case, <code>myhost</code> must be the name
|
||||
(or a name) of the host that the connector server is running
|
||||
on.
|
||||
|
||||
<p>In this <code>JMXServiceURL</code>, the first <code>rmi:</code>
|
||||
specifies the RMI
|
||||
connector, while the second <code>rmi:</code> specifies the RMI
|
||||
registry.
|
||||
|
||||
<p>As another example, if the <code>JMXServiceURL</code> is:
|
||||
|
||||
<pre>
|
||||
<code>service:jmx:rmi://ignoredhost/jndi/ldap://dirhost:9999/cn=this,ou=that</code>
|
||||
</pre>
|
||||
|
||||
then the connector server will generate an
|
||||
<code>RMIJRMPServerImpl</code> and store its stub using the JNDI
|
||||
name
|
||||
|
||||
<pre>
|
||||
<code>ldap://dirhost:9999/cn=this,ou=that</code>
|
||||
</pre>
|
||||
|
||||
which means entry <code>cn=this,ou=that</code> in the LDAP
|
||||
directory running on port 9999 of host <code>dirhost</code>.
|
||||
|
||||
<p>If the <code>JMXServiceURL</code> is:
|
||||
|
||||
<pre>
|
||||
<code>service:jmx:rmi://ignoredhost/jndi/cn=this,ou=that</code>
|
||||
</pre>
|
||||
|
||||
then the connector server will generate an
|
||||
<code>RMIJRMPServerImpl</code> and store its stub using the JNDI
|
||||
name
|
||||
|
||||
<pre>
|
||||
<code>cn=this,ou=that</code>
|
||||
</pre>
|
||||
|
||||
For this case to work, the JNDI API must have been configured
|
||||
appropriately to supply the information about what directory to
|
||||
use.
|
||||
|
||||
<p>In these examples, the host name <code>ignoredhost</code> is
|
||||
not used by the connector server or its clients. It can be
|
||||
omitted, for example:</p>
|
||||
|
||||
<pre>
|
||||
<code>service:jmx:rmi:///jndi/cn=this,ou=that</code>
|
||||
</pre>
|
||||
|
||||
<p>However, it is good practice to use the name of the host
|
||||
where the connector server is running. This is often different
|
||||
from the name of the directory host.</p>
|
||||
|
||||
|
||||
<h3>Connector server attributes</h3>
|
||||
|
||||
<p>When using the default JRMP transport, RMI socket factories can
|
||||
be specified using the attributes
|
||||
<code>jmx.remote.rmi.client.socket.factory</code> and
|
||||
<code>jmx.remote.rmi.server.socket.factory</code> in the
|
||||
<code>environment</code> given to the
|
||||
<code>RMIConnectorServer</code> constructor. The values of these
|
||||
attributes must be of type {@link
|
||||
java.rmi.server.RMIClientSocketFactory} and {@link
|
||||
java.rmi.server.RMIServerSocketFactory}, respectively. These
|
||||
factories are used when creating the RMI objects associated with
|
||||
the connector.</p>
|
||||
|
||||
<h2>Creating an RMI connector client</h2>
|
||||
|
||||
<p>An RMI connector client is usually constructed using {@link
|
||||
javax.management.remote.JMXConnectorFactory}, with a
|
||||
<code>JMXServiceURL</code> that has <code>rmi</code> as its protocol.</p>
|
||||
|
||||
<p>If the <code>JMXServiceURL</code> was generated by the server,
|
||||
as described above under <a href="#servergen">"connector
|
||||
addresses generated by the server"</a>, then the client will
|
||||
need to obtain it directly or indirectly from the server.
|
||||
Typically, the server makes the <code>JMXServiceURL</code>
|
||||
available by storing it in a file or a lookup service.</p>
|
||||
|
||||
<p>If the <code>JMXServiceURL</code> uses the directory syntax, as
|
||||
described above under <a href="#directory">"connector addresses
|
||||
based on directory entries"</a>, then the client may obtain it
|
||||
as just explained, or client and server may both know the
|
||||
appropriate directory entry to use. For example, if the
|
||||
connector server for the Whatsit agent uses the entry
|
||||
<code>whatsit-agent-connector</code> in the RMI registry on host
|
||||
<code>myhost</code>, then client and server can both know
|
||||
that the appropriate <code>JMXServiceURL</code> is:</p>
|
||||
|
||||
<pre>
|
||||
<code>service:jmx:rmi:///jndi/rmi://myhost/whatsit-agent-connector</code>
|
||||
</pre>
|
||||
|
||||
<p>If you have an RMI stub of type {@link
|
||||
javax.management.remote.rmi.RMIServer RMIServer}, you can
|
||||
construct an RMI connection directly by using the appropriate
|
||||
constructor of {@link javax.management.remote.rmi.RMIConnector
|
||||
RMIConnector}.</p>
|
||||
|
||||
<h2>Dynamic code downloading</h2>
|
||||
|
||||
<p>If an RMI connector client or server receives from its peer an
|
||||
instance of a class that it does not know, and if dynamic code
|
||||
downloading is active for the RMI connection, then the class can
|
||||
be downloaded from a codebase specified by the peer.
|
||||
{@extLink rmi_guide Java RMI Guide} explains this in more detail.</p>
|
||||
|
||||
@see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045,
|
||||
section 6.8, "Base64 Content-Transfer-Encoding"</a>
|
||||
|
||||
|
||||
@since 1.5
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user