Module is.codion.common.rmi
Package is.codion.common.rmi.server
Class AbstractServer<T extends Remote,A extends ServerAdmin>
- java.lang.Object
-
- java.rmi.server.RemoteObject
-
- java.rmi.server.RemoteServer
-
- java.rmi.server.UnicastRemoteObject
-
- is.codion.common.rmi.server.AbstractServer<T,A>
-
- Type Parameters:
T
- the type of remote interface served by this serverA
- the type of the admin interface this server provides
- All Implemented Interfaces:
Server<T,A>
,Serializable
,Remote
- Direct Known Subclasses:
EntityServer
public abstract class AbstractServer<T extends Remote,A extends ServerAdmin> extends UnicastRemoteObject implements Server<T,A>
A default Server implementation.- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
AbstractServer.ClientConnection<T>
-
Nested classes/interfaces inherited from interface is.codion.common.rmi.server.Server
Server.Locator
-
-
Field Summary
-
Fields inherited from class java.rmi.server.RemoteObject
ref
-
Fields inherited from interface is.codion.common.rmi.server.Server
CLIENT_HOST
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractServer(ServerConfiguration configuration)
Instantiates a new AbstractServer
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
addLoginProxy(LoginProxy loginProxy)
protected void
addShutdownListener(EventListener listener)
protected Collection<RemoteClient>
clients(String clientTypeId)
T
connect(ConnectionRequest connectionRequest)
Establishes a connection to this Serverprotected abstract T
connect(RemoteClient remoteClient)
Establishes the actual client connection.T
connection(UUID clientId)
int
connectionCount()
Map<RemoteClient,T>
connections()
boolean
connectionsAvailable()
void
disconnect(UUID clientId)
Disconnects the connection identified by the given key.protected abstract void
disconnect(T connection)
Disconnects the given connection.protected A
getAdmin()
int
getConnectionLimit()
int
getMaintenanceInterval()
protected <T extends Throwable>
TlogShutdownAndReturn(T exception)
protected abstract void
maintainConnections(Collection<AbstractServer.ClientConnection<T>> connections)
Maintains the given connections, that is, disconnects inactive or invalid connections, if required.protected Registry
registry()
ServerInformation
serverInformation()
protected void
setAdmin(A admin)
void
setConnectionLimit(int connectionLimit)
void
setMaintenanceInterval(int maintenanceInterval)
void
shutdown()
Shuts down this server.protected static void
validateUserCredentials(User userToCheck, User requiredUser)
Validates the given user credentials-
Methods inherited from class java.rmi.server.UnicastRemoteObject
clone, exportObject, exportObject, exportObject, exportObject, exportObject, unexportObject
-
Methods inherited from class java.rmi.server.RemoteServer
getClientHost, getLog, setLog
-
Methods inherited from class java.rmi.server.RemoteObject
equals, getRef, hashCode, toString, toStub
-
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface is.codion.common.rmi.server.Server
serverAdmin, serverLoad
-
-
-
-
Constructor Detail
-
AbstractServer
protected AbstractServer(ServerConfiguration configuration) throws RemoteException
Instantiates a new AbstractServer- Parameters:
configuration
- the configuration- Throws:
RemoteException
- in case of an exception
-
-
Method Detail
-
connections
public final Map<RemoteClient,T> connections()
- Returns:
- a map containing the current connections
-
connection
public final T connection(UUID clientId)
- Parameters:
clientId
- the client id- Returns:
- the connection associated with the given client
- Throws:
IllegalArgumentException
- in case no such client is connected
-
connectionCount
public final int connectionCount()
- Returns:
- the current number of connections
-
getConnectionLimit
public final int getConnectionLimit()
- Returns:
- the maximum number of concurrent connections accepted by this server, a negative number means no limit while 0 means the server is closed.
-
setConnectionLimit
public final void setConnectionLimit(int connectionLimit)
- Parameters:
connectionLimit
- the maximum number of concurrent connections accepted by this server, a negative number means no limit while 0 means the server is closed.
-
getMaintenanceInterval
public final int getMaintenanceInterval()
- Returns:
- the maintenance check interval in ms
-
setMaintenanceInterval
public final void setMaintenanceInterval(int maintenanceInterval)
- Parameters:
maintenanceInterval
- the new maintenance interval in ms
-
serverInformation
public final ServerInformation serverInformation()
- Specified by:
serverInformation
in interfaceServer<T extends Remote,A extends ServerAdmin>
- Returns:
- static information about this server
-
connectionsAvailable
public final boolean connectionsAvailable()
- Specified by:
connectionsAvailable
in interfaceServer<T extends Remote,A extends ServerAdmin>
- Returns:
- true if there are connections available
-
connect
public final T connect(ConnectionRequest connectionRequest) throws RemoteException, ConnectionNotAvailableException, LoginException, ConnectionValidationException
Description copied from interface:Server
Establishes a connection to this Server- Specified by:
connect
in interfaceServer<T extends Remote,A extends ServerAdmin>
- Parameters:
connectionRequest
- the information required for establishing a connection- Returns:
- a remote connection instance
- Throws:
RemoteException
- in case of a communication errorConnectionNotAvailableException
- in case the server isn't accepting more connectionsLoginException
- in case the login failsConnectionValidationException
- in case connection validation fails
-
disconnect
public final void disconnect(UUID clientId) throws RemoteException
Description copied from interface:Server
Disconnects the connection identified by the given key.- Specified by:
disconnect
in interfaceServer<T extends Remote,A extends ServerAdmin>
- Parameters:
clientId
- the UUID identifying the client that should be disconnected- Throws:
RemoteException
- in case of a communication error
-
shutdown
public final void shutdown()
Shuts down this server.
-
addLoginProxy
public final void addLoginProxy(LoginProxy loginProxy)
-
setAdmin
protected final void setAdmin(A admin)
-
getAdmin
protected final A getAdmin()
-
addShutdownListener
protected final void addShutdownListener(EventListener listener)
- Parameters:
listener
- a listener notified when this server is shutting down.
-
connect
protected abstract T connect(RemoteClient remoteClient) throws RemoteException, LoginException
Establishes the actual client connection.- Parameters:
remoteClient
- the client connection info- Returns:
- a connection servicing the given client
- Throws:
RemoteException
- in case of an exceptionLoginException
- in case of an error during the login
-
disconnect
protected abstract void disconnect(T connection) throws RemoteException
Disconnects the given connection.- Parameters:
connection
- the connection to disconnect- Throws:
RemoteException
- in case of an exception
-
maintainConnections
protected abstract void maintainConnections(Collection<AbstractServer.ClientConnection<T>> connections) throws RemoteException
Maintains the given connections, that is, disconnects inactive or invalid connections, if required.- Parameters:
connections
- all current connections- Throws:
RemoteException
- in case of an exception
-
clients
protected final Collection<RemoteClient> clients(String clientTypeId)
- Parameters:
clientTypeId
- the client type id- Returns:
- all clients of the given type
-
registry
protected final Registry registry() throws RemoteException
- Throws:
RemoteException
-
logShutdownAndReturn
protected final <T extends Throwable> T logShutdownAndReturn(T exception)
-
validateUserCredentials
protected static final void validateUserCredentials(User userToCheck, User requiredUser) throws ServerAuthenticationException
Validates the given user credentials- Parameters:
userToCheck
- the credentials to checkrequiredUser
- the required credentials- Throws:
ServerAuthenticationException
- in case either User instance is null or if the username or password does not match
-
-