You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2009/04/03 13:12:37 UTC
svn commit: r761613 - in
/jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server:
RemoteAdapterFactory.java ServerAdapterFactory.java
ServerEventCollection.java ServerObject.java
Author: jukka
Date: Fri Apr 3 11:12:36 2009
New Revision: 761613
URL: http://svn.apache.org/viewvc?rev=761613&view=rev
Log:
JCRRMI-13: Enhancement to get RMI through firewalls
Added a port number attribute to RemoteAdapterFactory interface. This port (0 for a random port) is used by all ServerObject instances created by that factory.
The attribute is initialized to the value of the org.apache.jackrabbit.rmi.port system property, or to 0 if the property is not set.
Thanks to Tony Richardson for the idea!
Modified:
jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/RemoteAdapterFactory.java
jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java
jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerEventCollection.java
jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerObject.java
Modified: jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/RemoteAdapterFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/RemoteAdapterFactory.java?rev=761613&r1=761612&r2=761613&view=diff
==============================================================================
--- jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/RemoteAdapterFactory.java (original)
+++ jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/RemoteAdapterFactory.java Fri Apr 3 11:12:36 2009
@@ -89,6 +89,16 @@
public interface RemoteAdapterFactory {
/**
+ * Returns the port number to which the server objects created by
+ * this factory are bound. This method is mostly used internally by
+ * the {@link ServerObject} constructor to determine which port number
+ * to use.
+ *
+ * @return port number, or 0 for a random port
+ */
+ int getPortNumber();
+
+ /**
* Returns a remote adapter for the given local repository.
*
* @param repository local repository
Modified: jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java?rev=761613&r1=761612&r2=761613&view=diff
==============================================================================
--- jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java (original)
+++ jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java Fri Apr 3 11:12:36 2009
@@ -102,6 +102,15 @@
private int bufferSize = DEFAULT_BUFFER_SIZE;
/**
+ * The port number for server objects. Initializes to the value of
+ * the <code>org.apache.jackrabbit.rmi.port</code> system property,
+ * or to 0 if the property is not set. Value 0 means that the server
+ * objects should use a random anonymous port.
+ */
+ private int portNumber =
+ Integer.getInteger("org.apache.jackrabbit.rmi.port", 0).intValue();
+
+ /**
* Returns the iterator buffer size.
*
* @return iterator buffer size
@@ -120,6 +129,24 @@
}
/**
+ * Returns the port number for server objects.
+ *
+ * @return port number, or 0 for the default
+ */
+ public int getPortNumber() {
+ return portNumber;
+ }
+
+ /**
+ * Sets the port number for server objects.
+ *
+ * @param portNumber port number, or 0 for the default
+ */
+ public void setPortNumber(int portNumber) {
+ this.portNumber = portNumber;
+ }
+
+ /**
* Creates a {@link ServerRepository ServerRepository} instance.
* {@inheritDoc}
*/
@@ -318,7 +345,7 @@
try {
Event event = events.nextEvent();
eventList.add(new ServerEventCollection.ServerEvent(
- event.getType(), event.getPath(), event.getUserID()));
+ event.getType(), event.getPath(), event.getUserID(), this));
} catch (RepositoryException re) {
throw new RemoteException(re.getMessage(), re);
}
@@ -329,7 +356,7 @@
remoteEvents = new RemoteEventCollection.RemoteEvent[0]; // for safety
}
- return new ServerEventCollection(listenerId, remoteEvents);
+ return new ServerEventCollection(listenerId, remoteEvents, this);
}
/**
Modified: jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerEventCollection.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerEventCollection.java?rev=761613&r1=761612&r2=761613&view=diff
==============================================================================
--- jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerEventCollection.java (original)
+++ jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerEventCollection.java Fri Apr 3 11:12:36 2009
@@ -29,11 +29,6 @@
* of events the unique identifier of the client-side listener has to be
* provided such that the receiving listener may be identified on the
* client-side.
- * <p>
- * This class does not require the
- * {@link org.apache.jackrabbit.rmi.server.RemoteAdapterFactory}and
- * consequently calls the base class constructor with a <code>null</code>
- * factory.
*/
public class ServerEventCollection extends ServerObject implements
RemoteEventCollection {
@@ -53,12 +48,13 @@
* @param listenerId The unique identifier of the client-side listener to
* which the events should be sent.
* @param events The list of {@link RemoteEvent remote events}.
- *
+ * @param factory remote adapter factory
* @throws RemoteException on RMI errors
*/
- ServerEventCollection(long listenerId, RemoteEvent[] events)
+ ServerEventCollection(
+ long listenerId, RemoteEvent[] events, RemoteAdapterFactory factory)
throws RemoteException {
- super(null);
+ super(factory);
this.listenerId = listenerId;
this.events = events;
@@ -95,13 +91,13 @@
* @param type The event type.
* @param path The absolute path to the underlying item.
* @param userId The userID of the originating session.
- *
- * @throws RemoteException declared because of the declaration in the
- * base class constructor called. In fact this exception is never
- * thrown.
+ * @param factory remote adapter factory
+ * @throws RemoteException on RMI errors
*/
- ServerEvent(int type, String path, String userId) throws RemoteException {
- super(null);
+ ServerEvent(
+ int type, String path, String userId, RemoteAdapterFactory factory)
+ throws RemoteException {
+ super(factory);
this.type = type;
this.path = path;
this.userID = userId;
Modified: jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerObject.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerObject.java?rev=761613&r1=761612&r2=761613&view=diff
==============================================================================
--- jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerObject.java (original)
+++ jackrabbit/commons/jcr-rmi/trunk/src/main/java/org/apache/jackrabbit/rmi/server/ServerObject.java Fri Apr 3 11:12:36 2009
@@ -68,6 +68,7 @@
*/
protected ServerObject(RemoteAdapterFactory factory)
throws RemoteException {
+ super(factory.getPortNumber());
this.factory = factory;
}