JBoss.org Community Documentation
This capability is provided by http-invoker.sar
. The structure of the http-invoker.sar
is:
http-invoker.sar
+- META-INF/jboss-service.xml
+- invoker.war
| +- WEB-INF/jboss-web.xml
| +- WEB-INF/classes/org/jboss/invocation/http/servlet/InvokerServlet.class
| +- WEB-INF/classes/org/jboss/invocation/http/servlet/NamingFactoryServlet.class
| +- WEB-INF/classes/org/jboss/invocation/http/servlet/ReadOnlyAccessFilter.class
| +- WEB-INF/web.xml
| +- META-INF/MANIFEST.MF
+- META-INF/MANIFEST.MF
The jboss-service.xml
descriptor defines the HttpInvoker
and HttpInvokerHA
MBeans. These services handle the routing of methods invocations that are sent via HTTP to the appropriate target MBean on the JMX bus.
The http-invoker.war
web application contains servlets that handle the details of the HTTP transport. The NamingFactoryServlet
handles creation requests for the JBoss JNDI naming service javax.naming.Context
implementation. The InvokerServlet
handles invocations made by RMI/HTTP clients. The ReadOnlyAccessFilter
allows one to secure the JNDI naming service while making a single JNDI context available for read-only access by unauthenticated clients.
Before looking at the configurations let's look at the operation of the http-invoker
services. Figure 4.2, “The HTTP invoker proxy/server structure for a JNDI Context” shows a logical view of the structure of a JBoss JNDI proxy and its relationship to the JBoss server side components of the http-invoker
. The proxy is obtained from the NamingFactoryServlet
using an InitialContext
with the Context.INITIAL_CONTEXT_FACTORY
property set to org.jboss.naming.HttpNamingContextFactory
, and the Context.PROVIDER_URL
property set to the HTTP URL of the NamingFactoryServlet
. The resulting proxy is embedded in an org.jnp.interfaces.NamingContext
instance that provides the Context
interface implementation.
The proxy is an instance of org.jboss.invocation.http.interfaces.HttpInvokerProxy
, and implements the org.jnp.interfaces.Naming
interface. Internally the HttpInvokerProxy
contains an invoker that marshalls the Naming
interface method invocations to the InvokerServlet
via HTTP posts. The InvokerServlet
translates these posts into JMX invocations to the NamingService
, and returns the invocation response back to the proxy in the HTTP post response.
There are several configuration values that need to be set to tie all of these components together and Figure 4.3, “The relationship between configuration files and JNDI/HTTP component” illustrates the relationship between configuration files and the corresponding components.
The http-invoker.sar/META-INF/jboss-service.xml
descriptor defines the HttpProxyFactory
that creates the HttpInvokerProxy
for the NamingService
. The attributes that need to be configured for the HttpProxyFactory
include:
InvokerName
: The JMX ObjectName
of the NamingService
defined in the conf/jboss-service.xml
descriptor. The standard setting used in the JBoss distributions is jboss:service=Naming
.
InvokerURL
or
InvokerURLPrefix
+ InvokerURLSuffix +
UseHostName
. You can specify the full HTTP URL to the InvokerServlet
using the InvokerURL
attribute, or you can specify the hostname independent parts of the URL and have the HttpProxyFactory
fill them in. An example InvokerURL
value would be http://jbosshost1.dot.com:8080/invoker/JMXInvokerServlet
. This can be broken down into:
InvokerURLPrefix
: the URL prefix prior to the hostname. Typically this will be http://
or https://
if SSL is to be used.
InvokerURLSuffix
: the URL suffix after the hostname. This will include the port number of the web server as well as the deployed path to the InvokerServlet
. For the example InvokerURL
value the InvokerURLSuffix
would be :8080/invoker/JMXInvokerServlet
without the quotes. The port number is determined by the web container service settings. The path to the InvokerServlet
is specified in the http-invoker.sar/invoker.war/WEB-INF/web.xml
descriptor.
UseHostName
: a flag indicating if the hostname should be used in place of the host IP address when building the hostname portion of the full InvokerURL
. If true, InetAddress.getLocalHost().getHostName
method will be used. Otherwise, the InetAddress.getLocalHost().getHostAddress()
method is used.
ExportedInterface
: The org.jnp.interfaces.Naming
interface the proxy will expose to clients. The actual client of this proxy is the JBoss JNDI implementation NamingContext
class, which JNDI client obtain from InitialContext
lookups when using the JBoss JNDI provider.
JndiName
: The name in JNDI under which the proxy is bound. This needs to be set to a blank/empty string to indicate the interface should not be bound into JNDI. We can't use the JNDI to bootstrap itself. This is the role of the NamingFactoryServlet
.
The http-invoker.sar/invoker.war/WEB-INF/web.xml
descriptor defines the mappings of the NamingFactoryServlet
and InvokerServlet
along with their initialization parameters. The configuration of the NamingFactoryServlet
relevant to JNDI/HTTP is the JNDIFactory
entry which defines:
A namingProxyMBean
initialization parameter that maps to the HttpProxyFactory
MBean name. This is used by the NamingFactoryServlet
to obtain the Naming
proxy which it will return in response to HTTP posts. For the default http-invoker.sar/META-INF/jboss-service.xml
settings the name jboss:service=invoker,type=http,target=Naming
is used.
A proxy initialization parameter that defines the name of the namingProxyMBean
attribute to query for the Naming proxy value. This defaults to an attribute name of Proxy
.
The servlet mapping for the JNDIFactory
configuration. The default setting for the unsecured mapping is /JNDIFactory/*
. This is relative to the context root of the http-invoker.sar/invoker.war
, which by default is the WAR name minus the .war
suffix.
The configuration of the InvokerServlet
relevant to JNDI/HTTP is the JMXInvokerServlet
which defines:
The servlet mapping of the InvokerServlet
. The default setting for the unsecured mapping is /JMXInvokerServlet/*
. This is relative to the context root of the http-invoker.sar/invoker.war
, which by default is the WAR name minus the .war
suffix.