r682 - in trunk: . wikitty-api wikitty-api/src/main/java/org/nuiton/wikitty/services wikitty-api/src/test/java/org/nuiton/wikitty/services
Author: bpoussin Date: 2011-01-17 15:30:13 +0100 (Mon, 17 Jan 2011) New Revision: 682 Url: http://nuiton.org/repositories/revision/wikitty/682 Log: Evolution #1204: Add cajo client/server protocole Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCajoClient.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCajoServer.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceCajoTest.java Modified: trunk/pom.xml trunk/wikitty-api/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-01-10 21:32:44 UTC (rev 681) +++ trunk/pom.xml 2011-01-17 14:30:13 UTC (rev 682) @@ -35,6 +35,13 @@ <dependencyManagement> <dependencies> + <!-- pour la communication client/serveur et la notification sur protocole cajo --> + <dependency> + <groupId>gnu.cajo</groupId> + <artifactId>cajo</artifactId> + <version>1.168</version> + </dependency> + <!-- cache implementation --> <dependency> <groupId>org.apache.jcs</groupId> @@ -209,7 +216,7 @@ <version>1.2.2</version> </dependency> - <!-- Cache --> + <!-- xmpp --> <dependency> <groupId>jivesoftware</groupId> <artifactId>smack</artifactId> @@ -495,7 +502,7 @@ <!-- common versions used in sub-poms --> <eugeneVersion>2.3</eugeneVersion> - <nuitonUtilsVersion>1.5.2</nuitonUtilsVersion> + <nuitonUtilsVersion>1.5.3</nuitonUtilsVersion> <nuitonI18nVersion>2.0.1</nuitonI18nVersion> <processPluginVersion>1.0.3</processPluginVersion> Modified: trunk/wikitty-api/pom.xml =================================================================== --- trunk/wikitty-api/pom.xml 2011-01-10 21:32:44 UTC (rev 681) +++ trunk/wikitty-api/pom.xml 2011-01-17 14:30:13 UTC (rev 682) @@ -47,6 +47,12 @@ <!-- COMPILE --> + <!-- pour la communication client/serveur et la notification sur protocole cajo --> + <dependency> + <groupId>gnu.cajo</groupId> + <artifactId>cajo</artifactId> + </dependency> + <!-- cache implementation --> <dependency> <groupId>org.apache.jcs</groupId> Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCajoClient.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCajoClient.java (rev 0) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCajoClient.java 2011-01-17 14:30:13 UTC (rev 682) @@ -0,0 +1,48 @@ +package org.nuiton.wikitty.services; + + +import gnu.cajo.utils.extra.TransparentItemProxy; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; +import org.nuiton.wikitty.WikittyConfig; +import org.nuiton.wikitty.WikittyException; +import org.nuiton.wikitty.WikittyService; + +/** + * Cajo client part, this client must be used with {@link WikittyServiceCajoServer} + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class WikittyServiceCajoClient extends WikittyServiceDelegator { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(WikittyServiceCajoClient.class); + + public WikittyServiceCajoClient(ApplicationConfig config) { + try { + String url = config.getOption(WikittyConfig.WikittyOption. + WIKITTY_SERVER_URL.getKey()); + + // cajo url is not http or other protocol, url must start with // + // example: //localhost:1198/ws + // remove protocol + int i = url.indexOf("://"); + if (i >= 0) { + url = url.substring(i+1); + } + + log.info(String.format("Looking for serveur '%s'", url)); + WikittyService ws = (WikittyService) TransparentItemProxy.getItem( + url, new Class[]{WikittyService.class}); + setDelegate(ws); + } catch (Exception eee) { + throw new WikittyException("Can't find wikitty server", eee); + } + } + +} Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCajoServer.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCajoServer.java (rev 0) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCajoServer.java 2011-01-17 14:30:13 UTC (rev 682) @@ -0,0 +1,88 @@ +package org.nuiton.wikitty.services; + + +import gnu.cajo.invoke.Remote; +import gnu.cajo.utils.ItemServer; +import java.net.URL; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; +import org.nuiton.wikitty.WikittyConfig; +import org.nuiton.wikitty.WikittyException; +import org.nuiton.wikitty.WikittyService; + +/** + * Cajo server to used wikitty as client/server on cajo protocol (rmi based + * protocol). see <a href="http://cajo.dev.java.net">http://cajo.dev.java.net</a> + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class WikittyServiceCajoServer extends WikittyServiceDelegator { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(WikittyServiceCajoServer.class); + + protected int port = 80; + protected String path = ""; + + public WikittyServiceCajoServer(ApplicationConfig config, WikittyService ws) { + try { + setDelegate(ws); + + // port and path from hessian server url in config + String urlString = config.getOption(WikittyConfig.WikittyOption. + WIKITTY_SERVER_URL.getKey()); + + // get port and path part of server url, only that is used for cajo + if (urlString != null && !"".equals(urlString)) { + URL url = new URL(urlString); + if (-1 != url.getPort()) { + port = url.getPort(); + } + if (null != url.getPath()) { + path = url.getPath(); + } + } + + if ("".equals(path)) { + path = "WikittyService"; + } else if(path.startsWith("/")) { + path = path.substring(1); + } + + Remote.config(null, port, null, 0); + ItemServer.bind(this, path); + log.info(String.format("The server is running on %s:%s/%s", + Remote.getDefaultServerHost(), Remote.getDefaultServerPort(), path) ); + } catch (Exception eee) { + throw new WikittyException("Can't start wikitty server", eee); + } + } + + /** + * get port number of the service, default: 80 + * @return + */ + public int getPort() { + return port; + } + + /** + * get path used to bind server, default: WikittyService + * @return + */ + public String getPath() { + return path; + } + + /** + * stop the server + */ + public void stop() { + ItemServer.unbind(path); + } +} Added: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceCajoTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceCajoTest.java (rev 0) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceCajoTest.java 2011-01-17 14:30:13 UTC (rev 682) @@ -0,0 +1,80 @@ +package org.nuiton.wikitty.services; + + +import gnu.cajo.utils.ItemServer; +import java.util.Collections; +import java.util.List; +import java.util.Properties; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.wikitty.WikittyConfig; +import org.nuiton.wikitty.WikittyProxy; +import org.nuiton.wikitty.WikittyService; +import org.nuiton.wikitty.WikittyServiceFactory; +import org.nuiton.wikitty.entities.Wikitty; +import org.nuiton.wikitty.entities.WikittyImpl; + +/** + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class WikittyServiceCajoTest { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(WikittyServiceCajoTest.class); + + static final protected String url = "http://localhost:1198/ws"; + + protected WikittyService startServer() throws Exception { + Properties props = new Properties(); + props.setProperty(WikittyConfig.WikittyOption.WIKITTY_SERVER_URL.getKey(), + url); + props.setProperty(WikittyConfig.WikittyOption.WIKITTY_WIKITTYSERVICE_COMPONENTS.getKey(), + WikittyServiceInMemory.class.getName() + "," + + WikittyServiceCajoServer.class.getName()); + WikittyConfig config = new WikittyConfig(props); + WikittyService result = WikittyServiceFactory.buildWikittyService(config); + return result; + } + + protected void stopServer(WikittyService ws) { + if (ws instanceof WikittyServiceCajoServer) { + ((WikittyServiceCajoServer)ws).stop(); + } + } + + protected WikittyService getClient() throws Exception { + Properties props = new Properties(); + props.setProperty(WikittyConfig.WikittyOption.WIKITTY_SERVER_URL.getKey(), + url); + props.setProperty(WikittyConfig.WikittyOption.WIKITTY_WIKITTYSERVICE_COMPONENTS.getKey(), + WikittyServiceCajoClient.class.getName()); + WikittyConfig config = new WikittyConfig(props); + WikittyService result = WikittyServiceFactory.buildWikittyService(config); + return result; + } + + + @Test + public void testCajo() throws Exception { + WikittyService server = startServer(); + WikittyService client = getClient(); + + WikittyProxy proxy = new WikittyProxy(client); + + Wikitty w = new WikittyImpl(); + proxy.store(w); + + List<Wikitty> list = server.restore(null, Collections.singletonList(w.getId())); + Assert.assertEquals(1, list.size()); + + stopServer(server); + } + +}
participants (1)
-
bpoussin@users.nuiton.org