commit 5e394236f8a364238b7fd12ad4db63d0527ac641
Author: Cherian Mathew <c.mathew@bgbm.org>
Date:   Tue Jan 27 09:34:43 2015 +0000

    MANIFEST.MF : New apache http client packages added
    CdmServerInfo : changed name and added inner class for cdm instance
    httpInvokerServiceClients : added new services
    remotingApplicationContext : refactor for cache package

diff --git a/.gitattributes b/.gitattributes
index 86691e2f5..03c4d57c8 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -351,7 +351,7 @@ eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/sour
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSource.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSourceBase.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSourceException.java -text
-eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInstanceInfo.java -text
+eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/ICdmRemoteSource.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceInterceptorException.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceRequestExecutor.java -text
diff --git a/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF
index 54402fbc3..dcc354f52 100644
--- a/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF
+++ b/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF
@@ -182,6 +182,7 @@ Export-Package: com.google.api,
  eu.etaxonomy.cdm.validation.annotation,
  eu.etaxonomy.cdm.validation.constraint,
  eu.etaxonomy.remote.dto.rdf,
+ eu.etaxonomy.taxeditor.remoting.cache,
  eu.etaxonomy.taxeditor.remoting.server,
  eu.etaxonomy.taxeditor.remoting.source,
  eu.etaxonomy.taxeditor.session,
@@ -199,6 +200,8 @@ Export-Package: com.google.api,
  org.apache.fop.apps,
  org.apache.http,
  org.apache.http.client,
+ org.apache.http.client.methods,
+ org.apache.http.util,
  org.apache.log4j;uses:="org.apache.log4j.helpers,org.apache.log4j.or,org.apache.log4j.spi",
  org.apache.log4j.chainsaw;
   uses:="org.apache.log4j,
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java
new file mode 100644
index 000000000..ca2181b13
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java
@@ -0,0 +1,226 @@
+// $Id$
+/**
+ * Copyright (C) 2015 EDIT
+ * European Distributed Institute of Taxonomy
+ * http://www.e-taxonomy.eu
+ *
+ * The contents of this file are subject to the Mozilla Public License Version 1.1
+ * See LICENSE.TXT at the top of this package for the full license terms.
+ */
+package eu.etaxonomy.taxeditor.remoting.source;
+
+import java.io.IOException;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.ResponseHandler;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.util.EntityUtils;
+import org.apache.log4j.Logger;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import eu.etaxonomy.cdm.config.CdmSourceException;
+import eu.etaxonomy.taxeditor.remoting.server.CDMServerException;
+
+/**
+ * @author cmathew
+ * @date 20 Jan 2015
+ *
+ */
+public class CdmServerInfo {
+    public static final Logger logger = Logger.getLogger(CdmServerInfo.class);
+
+    private final static String NAME_PRODUCTION = "edit-production";
+    private final static String SERVER_PRODUCTION = "dev.e-taxonomy.eu";
+
+    private final static String NAME_INTEGRATION = "edit-integration";
+    private final static String SERVER_INTEGRATION = "int.e-taxonomy.eu";
+
+    private final static String NAME_TEST = "edit-test";
+    private final static String SERVER_TEST = "test.e-taxonomy.eu";
+
+    private final static String SERVER_LOCALHOST = "localhost";
+    private final static String NAME_LOCALHOST = "localhost";
+    private final static String NAME_LOCALHOST_MGD = "localhost mgd.";
+
+    private final String name;
+    private final String server;
+    private final int port;
+    private final List<CdmInstanceInfo> instances;
+
+
+    public CdmServerInfo(String name, String server, int port) {
+        this.name = name;
+        this.server = server;
+        this.port = port;
+        instances = new ArrayList<CdmInstanceInfo>();
+    }
+
+
+    public void refreshInstances() throws CDMServerException {
+        String url = "http://" + server + ":" + String.valueOf(port) + "/cdmserver/instances.jsp";
+
+        HttpClient client = new DefaultHttpClient();
+        HttpGet httpGet = new HttpGet(url);
+
+        logger.info("Executing request " + httpGet.getRequestLine());
+
+        // Create a custom response handler
+        ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
+
+            @Override
+            public String handleResponse(
+                    final HttpResponse response) throws ClientProtocolException, IOException {
+                int status = response.getStatusLine().getStatusCode();
+                if (status >= 200 && status < 300) {
+                    HttpEntity entity = response.getEntity();
+                    return entity != null ? EntityUtils.toString(entity) : null;
+                } else {
+                    throw new ClientProtocolException("Unexpected response status: " + status);
+                }
+            }
+
+        };
+        String responseBody = null;
+        try {
+            responseBody = client.execute(httpGet, responseHandler);
+        } catch (ClientProtocolException e) {
+            throw new CDMServerException(e);
+        } catch (IOException e) {
+            throw new CDMServerException(e);
+        }
+
+
+        if(responseBody != null) {
+            try {
+                JSONArray array = new JSONArray(responseBody);
+                for(int i=0;i<array.length();i++) {
+                    JSONObject instance = (JSONObject)array.get(i);
+                    if(instance != null) {
+                        JSONObject conf = (JSONObject)instance.get("configuration");
+                        if(conf != null) {
+                            String instanceName = conf.getString("instanceName");
+                            // we need to remove the first (char) forward slash from
+                            // the base path
+                            String basePath = conf.getString("basePath").substring(1);
+                            instances.add(new CdmInstanceInfo(instanceName, basePath));
+                            logger.info("Added instance with name : " + instanceName + ", basePath : " + basePath);
+                        }
+                    }
+                }
+            } catch (JSONException e) {
+                throw new CDMServerException(e);
+            }
+        }
+
+    }
+
+    public CdmInstanceInfo getInstanceFromName(String instanceName) {
+        if(instanceName == null) {
+            return null;
+        }
+
+        for(CdmInstanceInfo instance : instances) {
+            if(instance.getName() != null && instance.getName().equals(instanceName)) {
+                return instance;
+            }
+        }
+        return null;
+    }
+
+    public CdmRemoteSource getCdmRemoteSource(CdmInstanceInfo instance) {
+        if(instance != null) {
+            return CdmRemoteSource.NewInstance(name,
+                    server,
+                    port,
+                    instance.getBasePath(),
+                    null);
+        }
+        return null;
+    }
+
+    public boolean pingServer(){
+        try {
+            Socket s = new Socket(server, port);
+            logger.info("[CDM-Server] Available @ " + server + ":" + port );
+            return true;
+        } catch (IOException ioe) {
+
+        }
+        return false;
+    }
+
+    public boolean pingInstance(CdmInstanceInfo instance) throws CDMServerException  {
+
+        CdmRemoteSource crs = getCdmRemoteSource(instance);
+        try {
+            if(crs != null && crs.checkConnection()) {
+                logger.info("[CDM-Server] Running @ " + server + ":" + port + " for instance " + instance);
+                return true;
+            }
+        } catch (CdmSourceException e) {
+            throw new CDMServerException(e);
+        }
+
+        return false;
+    }
+
+    public static List<CdmServerInfo> getCdmServers() {
+        List<CdmServerInfo> cdmServerInfoList = new ArrayList<CdmServerInfo>();
+        cdmServerInfoList.add(new CdmServerInfo(NAME_PRODUCTION, SERVER_PRODUCTION, 80));
+        cdmServerInfoList.add(new CdmServerInfo(NAME_INTEGRATION, SERVER_INTEGRATION, 80));
+        cdmServerInfoList.add(new CdmServerInfo(NAME_TEST, SERVER_TEST, 80));
+        cdmServerInfoList.add(new CdmServerInfo(NAME_LOCALHOST, SERVER_LOCALHOST, 8080));
+        cdmServerInfoList.add(new CdmServerInfo(NAME_LOCALHOST_MGD, SERVER_LOCALHOST,8080));
+        return cdmServerInfoList;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getServer() {
+        return server;
+    }
+
+
+    public int getPort() {
+        return port;
+    }
+
+
+    public List<CdmInstanceInfo> getInstances() throws CDMServerException {
+        if(instances.isEmpty()) {
+            refreshInstances();
+        }
+        return instances;
+    }
+
+    public class CdmInstanceInfo {
+        private final String name;
+        private final String basePath;
+
+
+        public CdmInstanceInfo(String name, String basePath) {
+            this.name = name;
+            this.basePath = basePath;
+        }
+
+
+        public String getName() {
+            return name;
+        }
+
+        public String getBasePath() {
+            return basePath;
+        }
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInstanceInfo.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInstanceInfo.java
deleted file mode 100644
index 2ddac7355..000000000
--- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInstanceInfo.java
+++ /dev/null
@@ -1,124 +0,0 @@
-// $Id$
-/**
- * Copyright (C) 2015 EDIT
- * European Distributed Institute of Taxonomy
- * http://www.e-taxonomy.eu
- *
- * The contents of this file are subject to the Mozilla Public License Version 1.1
- * See LICENSE.TXT at the top of this package for the full license terms.
- */
-package eu.etaxonomy.taxeditor.remoting.source;
-
-import java.io.IOException;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-
-import eu.etaxonomy.cdm.config.CdmSourceException;
-import eu.etaxonomy.taxeditor.remoting.server.CDMServerException;
-
-/**
- * @author cmathew
- * @date 20 Jan 2015
- *
- */
-public class CdmServerInstanceInfo {
-    public static final Logger logger = Logger.getLogger(CdmServerInstanceInfo.class);
-
-    private final static String SERVER_LOCALHOST = "localhost";
-    private final static String NAME_LOCALHOST = "localhost";
-    private final static String NAME_LOCALHOST_MGD = "localhost mgd.";
-
-    private final static String CONTEXT_PATH_PREFIX = "cdmserver/";
-
-    private final String name;
-    private final String server;
-    private final int port;
-    private final List<String> instances;
-
-
-    public CdmServerInstanceInfo(String name, String server, int port) {
-        this.name = name;
-        this.server = server;
-        this.port = port;
-        instances = new ArrayList<String>();
-    }
-
-
-    public void refreshInstances() {
-        //FIXME:Remoting This list needs to be populated with a real fetch from the cdm server
-        if(name.equals(NAME_LOCALHOST)) {
-            instances.clear();
-            instances.add("local-cyprus");
-            instances.add("local-cichorieae");
-        }
-        if(name.equals(NAME_LOCALHOST_MGD)) {
-            instances.clear();
-            instances.add("local-test");
-        }
-    }
-
-    public CdmRemoteSource getCdmRemoteSource(String instance) {
-        return CdmRemoteSource.NewInstance(name,
-                server,
-                port,
-                CONTEXT_PATH_PREFIX + instance,
-                null);
-    }
-
-    public boolean pingServer(){
-        try {
-            Socket s = new Socket(server, port);
-            logger.info("[CDM-Server] Available @ " + server + ":" + port );
-            return true;
-        } catch (IOException ioe) {
-
-        }
-        return false;
-    }
-
-    public boolean pingInstance(String instance) throws CDMServerException  {
-
-        CdmRemoteSource crs = getCdmRemoteSource(instance);
-        try {
-            if(crs.checkConnection()) {
-                logger.info("[CDM-Server] Running @ " + server + ":" + port + " for instance " + instance);
-                return true;
-            }
-        } catch (CdmSourceException e) {
-            throw new CDMServerException(e);
-        }
-
-        return false;
-    }
-
-    public static List<CdmServerInstanceInfo> getCdmServers() {
-        List<CdmServerInstanceInfo> cdmServerInfoList = new ArrayList<CdmServerInstanceInfo>();
-        cdmServerInfoList.add(new CdmServerInstanceInfo(NAME_LOCALHOST, SERVER_LOCALHOST, 8080));
-        cdmServerInfoList.add(new CdmServerInstanceInfo(NAME_LOCALHOST_MGD, SERVER_LOCALHOST,8080));
-        return cdmServerInfoList;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getServer() {
-        return server;
-    }
-
-
-    public int getPort() {
-        return port;
-    }
-
-
-    public List<String> getInstances() {
-        if(instances.isEmpty()) {
-            refreshInstances();
-        }
-        return instances;
-    }
-}
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/cdmlib-remote-webapp.war b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/cdmlib-remote-webapp.war
index 2267e439a..3a83b405a 100644
Binary files a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/cdmlib-remote-webapp.war and b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/cdmlib-remote-webapp.war differ
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml
index e9502c5e9..9e64417e9 100644
--- a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml
+++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml
@@ -1,479 +1,581 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xmlns:context="http://www.springframework.org/schema/context"
-	xmlns:tx="http://www.springframework.org/schema/tx"
-	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
+  xmlns:tx="http://www.springframework.org/schema/tx"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
 
-	
-   <bean id="agentService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/agent.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IAgentService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="annotationService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/annotation.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IAnnotationService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="auditeventService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/auditevent.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IAuditEventService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="classificationService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/classification.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IClassificationService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="collectionService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/collection.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.ICollectionService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="commonService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/common.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.ICommonService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="descriptionService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/description.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IDescriptionService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-	
-   <bean id="editGeoService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/editgeo.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.ext.geo.IEditGeoService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="featureNodeService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/featurenode.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IFeatureNodeService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="featureTreeService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/featuretree.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IFeatureTreeService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="groupService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/group.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IGroupService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="identificationKeyService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/identificationkey.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IIdentificationKeyService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="locationService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/location.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.ILocationService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="markerService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/marker.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IMarkerService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="mediaService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/media.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IMediaService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="nameService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/name.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.INameService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="occurrenceService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/occurrence.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IOccurrenceService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="polytomousKeyNodeService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/polytomouskeynode.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="polytomousKeyService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/polytomouskey.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IPolytomousKeyService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="referenceService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/reference.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IReferenceService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-	
-<!-- 
-   <bean id="serviceService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/service.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IService</value>
-		</property>
-	</bean>
- -->
- 
-   <bean id="taxonNodeService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/taxonnode.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.ITaxonNodeService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="taxonService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/taxon.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.ITaxonService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="termService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/term.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.ITermService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="eu.etaxonomy.taxeditor.service.TermServiceRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="userService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/user.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IUserService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="vocabularyService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/vocabulary.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IVocabularyService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-   <bean id="workingSetService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/workingset.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IWorkingSetService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-	
-   <bean id="grantedAuthorityService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/grantedauthority.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IGrantedAuthorityService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-	
-   <bean id="databaseService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/database.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.IDatabaseService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-	
-   <bean id="lsidAuthorityService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsidauthoruty.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.lsid.LSIDAuthorityService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-	
-   <bean id="lsidMetadataService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsidmetadata.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.lsid.LSIDMetadataService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-	
-   <bean id="lsiDataService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsiddata.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.lsid.LSIDDataService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-
-	<bean id="providerManager"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/authenticationManager.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>org.springframework.security.authentication.AuthenticationManager</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-	
-	<bean id="primerService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/primer.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.molecular.IPrimerService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-	
-	<bean id="amplificationService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/amplification.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.molecular.IAmplificationService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
-	
-	<bean id="sequenceService"
-		class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
-		<property name="serviceUrl">
-			<value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/sequence.service</value>
-		</property>
-		<property name="serviceInterface">
-			<value>eu.etaxonomy.cdm.api.service.molecular.ISequenceService</value>
-		</property>
-		<property name="httpInvokerRequestExecutor">
-			<bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
-		</property>
-	</bean>
+
+  <bean id="agentService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/agent.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IAgentService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="annotationService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/annotation.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IAnnotationService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="auditeventService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/auditevent.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IAuditEventService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="classificationService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/classification.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IClassificationService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="collectionService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/collection.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.ICollectionService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="commonService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/common.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.ICommonService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="descriptionService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/description.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IDescriptionService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="editGeoService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/editgeo.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.ext.geo.IEditGeoService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="featureNodeService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/featurenode.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IFeatureNodeService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="featureTreeService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/featuretree.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IFeatureTreeService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="groupService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/group.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IGroupService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="identificationKeyService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/identificationkey.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IIdentificationKeyService
+      </value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="locationService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/location.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.ILocationService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="markerService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/marker.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IMarkerService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="mediaService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/media.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IMediaService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="nameService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/name.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.INameService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="occurrenceService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/occurrence.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IOccurrenceService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="polytomousKeyNodeService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/polytomouskeynode.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService
+      </value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="polytomousKeyService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/polytomouskey.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IPolytomousKeyService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="referenceService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/reference.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IReferenceService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <!-- <bean id="serviceService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean"> 
+    <property name="serviceUrl"> <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/service.service</value> 
+    </property> <property name="serviceInterface"> <value>eu.etaxonomy.cdm.api.service.IService</value> 
+    </property> </bean> -->
+
+  <bean id="taxonNodeService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/taxonnode.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.ITaxonNodeService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="taxonService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/taxon.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.ITaxonService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="termService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/term.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.ITermService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean class="eu.etaxonomy.taxeditor.service.TermServiceRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="userService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/user.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IUserService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="vocabularyService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/vocabulary.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IVocabularyService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="workingSetService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/workingset.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IWorkingSetService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="grantedAuthorityService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/grantedauthority.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IGrantedAuthorityService
+      </value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="databaseService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/database.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IDatabaseService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="lsidAuthorityService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsidauthoruty.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.lsid.LSIDAuthorityService
+      </value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="lsidMetadataService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsidmetadata.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.lsid.LSIDMetadataService
+      </value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="lsiDataService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsiddata.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.lsid.LSIDDataService</value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="providerManager"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/authenticationManager.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>org.springframework.security.authentication.AuthenticationManager
+      </value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="primerService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/primer.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.molecular.IPrimerService
+      </value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="amplificationService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/amplification.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.molecular.IAmplificationService
+      </value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="sequenceService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/sequence.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.molecular.ISequenceService
+      </value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="entityValidationResultService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/entityvalidationresult.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IEntityValidationResultService
+      </value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
+
+  <bean id="entityConstraintViolationService"
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
+    <property name="serviceUrl">
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/entityconstraintviolation.service
+      </value>
+    </property>
+    <property name="serviceInterface">
+      <value>eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService
+      </value>
+    </property>
+    <property name="httpInvokerRequestExecutor">
+      <bean
+        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />
+    </property>
+  </bean>
 
 
 
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml
index ed2ce1fb8..b3cb71f03 100644
--- a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml
+++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml
@@ -27,7 +27,7 @@
 			expression="eu\.etaxonomy\.cdm\.api\.cache\.CdmDaoCacher" />
 	</context:component-scan>
 
-	
+	<context:component-scan base-package="eu.etaxonomy.taxeditor.remoting.cache"/>
 
 	
 	<!-- EditGeoService was moved to ext. Therefore it will not be found by 
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/log4j.properties b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/log4j.properties
index 17257aa0c..6be7d0e58 100644
--- a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/log4j.properties
+++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/log4j.properties
@@ -25,3 +25,4 @@ log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
 ###
 log4j.logger.eu.etaxonomy.cdm = INFO
 log4j.logger.eu.etaxonomy.taxeditor.remoting.source = INFO
+log4j.logger.eu.etaxonomy.taxeditor.remoting.cache = INFO
