public class RepositoryStartupServlet extends AbstractRepositoryServlet
Registration with RMI
Upon successfull creation of the repository in the init()
method,
the repository is registered with an RMI registry if the web application is
so configured. To register with RMI, the following web application
init-params
are considered: rmi-port
designating
the port on which the RMI registry is listening, rmi-host
designating the interface on the local host on which the RMI registry is
active, repository-name
designating the name to which the
repository is to be bound in the registry, and rmi-uri
designating an RMI URI complete with host, optional port and name to which
the object is bound.
If the rmi-uri
parameter is configured with a non-empty value,
the rmi-port
and rmi-host
parameters are ignored.
The repository-name
parameter is only considered if a non-empty
rmi-uri
parameter is configured if the latter does not contain
a name to which to bind the repository.
This is the algorithm used to find out the host, port and name for RMI registration:
rmi-uri
nor a rmi-host
nor a
rmi-port
parameter is configured, the repository is not
registered with any RMI registry.
rmi-uri
parameter is configured extract the
host name (or IP address), port number and name to bind to from the
URI. If the URI is not valid, host defaults to 0.0.0.0
meaning all interfaces on the local host, port defaults to the RMI
default port (1099
) and the name defaults to the value
of the repository-name
parameter.
rmi-uri
is not configured, the host is taken
from the rmi-host
parameter, the port from the
rmi-port
parameter and the name to bind the repository to
from the repository-name
parameter. If the
rmi-host
parameter is empty or not configured, the host
defaults to 0.0.0.0
meaning all interfaces on the local
host. If the rmi-port
parameter is empty, not configured,
zero or a negative value, the default port for the RMI registry
(1099
) is used.
After finding the host and port of the registry, the RMI registry itself
is acquired. It is assumed, that host and port primarily designate an RMI
registry, which should be active on the local host but has not been started
yet. In this case, the LocateRegistry.createRegistry
method is
called to create a registry on the local host listening on the host and port
configured. If creation fails, the LocateRegistry.getRegistry
method is called to get a remote instance of the registry. Note, that
getRegistry
does not create an actual registry on the given
host/port nor does it check, whether an RMI registry is active.
When the registry has been retrieved, either by creation or by just creating a remote instance, the repository is bound to the configured name in the registry.
Possible causes for registration failures include:
Note: if a bootstrap-config
init parameter is specified the
servlet tries to read the respective resource, either as context resource or
as file. The properties specified in this file override the init params
specified in the web.xml
.
Setup Wizard Functionality
When using the first time, the configuraition can miss the relevant
repository parameters in the web.xml. if so, it must contain a
bootstrap-config
parameter that referrs to a propertiy file.
This file must exsit for proper working. If not, the repository is not
started.
If the servlet is not configured correctly and accessed via http, it will
provide a simple wizard for the first time configuration. It propmpts for
a new (or existing) repository home and will copy the templates of the
repository.xml and bootstrap.properties to the respective location.
Modifier and Type | Class and Description |
---|---|
protected static class |
RepositoryStartupServlet.RemoteFactoryDelegater
optional class for RMI, will only be used, if RMI server is present
|
protected static class |
RepositoryStartupServlet.RMIRemoteFactoryDelegater
optional class for RMI, will only be used, if RMI server is present
|
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
INIT_PARAM_BOOTSTRAP_CONFIG
initial param name for the bootstrap config location
|
Constructor and Description |
---|
RepositoryStartupServlet() |
Modifier and Type | Method and Description |
---|---|
protected Repository |
createRepository(java.io.File configJson,
java.io.File homedir)
Creates the repository instance for the given config and homedir.
|
void |
destroy()
destroy the servlet
|
protected void |
doGet(javax.servlet.http.HttpServletRequest req,
javax.servlet.http.HttpServletResponse resp) |
protected void |
doPost(javax.servlet.http.HttpServletRequest req,
javax.servlet.http.HttpServletResponse resp) |
BootstrapConfig |
getBootstrapConfig()
Returns the config that was used to bootstrap this servlet.
|
static RepositoryStartupServlet |
getInstance(javax.servlet.ServletContext context)
Returns an instance of this servlet.
|
protected java.lang.String |
getRemoteFactoryDelegaterClass()
Return the fully qualified name of the class providing the remote
repository.
|
Repository |
getRepository()
Returns the started repository or
null if not started
yet. |
RepositoryFactory |
getRepositoryFactory()
Returns a repository factory that returns the repository if available
or throws an exception if not.
|
protected java.rmi.server.RMIServerSocketFactory |
getRMIServerSocketFactory(java.net.InetAddress hostAddress)
Returns an
RMIServerSocketFactory used to create the server
socket for a locally created RMI registry. |
void |
init()
Initializes the servlet.
Please note that only one repository startup servlet may exist per webapp. |
void |
restart()
Restarts the repository.
|
void |
shutdown()
Does a shutdown of the repository and deregisters it from the RMI
registry and unbinds if from the JNDI context if so configured.
|
void |
startup()
Configures and starts the repository.
|
getAttributeName, getInitParameter
doDelete, doHead, doOptions, doPut, doTrace, getLastModified, service, service
public static final java.lang.String INIT_PARAM_BOOTSTRAP_CONFIG
public void init() throws javax.servlet.ServletException
init
in class AbstractRepositoryServlet
javax.servlet.ServletException
- if a same servlet is already registered or of
another initialization error occurs.public static RepositoryStartupServlet getInstance(javax.servlet.ServletContext context)
context
- the servlet contextpublic void startup() throws javax.servlet.ServletException
javax.servlet.ServletException
- if an error occurs.public void shutdown()
public void restart() throws javax.servlet.ServletException
javax.servlet.ServletException
- if an error occurs.shutdown()
,
startup()
public void destroy()
destroy
in interface javax.servlet.Servlet
destroy
in class AbstractRepositoryServlet
public Repository getRepository()
null
if not started
yet.getRepository
in class AbstractRepositoryServlet
public RepositoryFactory getRepositoryFactory()
protected Repository createRepository(java.io.File configJson, java.io.File homedir) throws RepositoryException
Repository
.configJson
- input source of the repository confighomedir
- the repository home directoryRepositoryException
- if an error during creation occurs.public BootstrapConfig getBootstrapConfig()
null
.protected java.lang.String getRemoteFactoryDelegaterClass()
RepositoryStartupServlet.RemoteFactoryDelegater
interface.
Subclasses may override this method for providing a name of a own implementation.
protected java.rmi.server.RMIServerSocketFactory getRMIServerSocketFactory(java.net.InetAddress hostAddress)
RMIServerSocketFactory
used to create the server
socket for a locally created RMI registry.
This implementation returns a new instance of a simple
RMIServerSocketFactory
which just creates instances of
the java.net.ServerSocket
class bound to the given
hostAddress
. Implementations may overwrite this method to
provide factory instances, which provide more elaborate server socket
creation, such as SSL server sockets.
hostAddress
- The InetAddress
instance representing the
the interface on the local host to which the server sockets are
bound.RMIServerSocketFactory
creating java.net.ServerSocket
instances bound to
the rmiHost
.protected void doGet(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp) throws javax.servlet.ServletException, java.io.IOException
doGet
in class AbstractRepositoryServlet
javax.servlet.ServletException
java.io.IOException
protected void doPost(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp) throws javax.servlet.ServletException, java.io.IOException
doPost
in class javax.servlet.http.HttpServlet
javax.servlet.ServletException
java.io.IOException
Copyright © 2012–2022 The Apache Software Foundation. All rights reserved.