You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by be...@apache.org on 2009/08/03 18:33:31 UTC
svn commit: r800455 - in
/mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper:
storage/OpenStorageProviderRegistry.java storage/StorageProviderRegistry.java
storage/inmemory/MemoryStorageProviderRegistry.java
xmpp/server/ServerMain.java
Author: berndf
Date: Mon Aug 3 16:33:30 2009
New Revision: 800455
URL: http://svn.apache.org/viewvc?rev=800455&view=rev
Log:
allow to specify additional modules on the command line (VYSPER-167).
Modified:
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/OpenStorageProviderRegistry.java
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/StorageProviderRegistry.java
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/inmemory/MemoryStorageProviderRegistry.java
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerMain.java
Modified: mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/OpenStorageProviderRegistry.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/OpenStorageProviderRegistry.java?rev=800455&r1=800454&r2=800455&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/OpenStorageProviderRegistry.java (original)
+++ mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/OpenStorageProviderRegistry.java Mon Aug 3 16:33:30 2009
@@ -28,7 +28,8 @@
import java.util.Set;
/**
- *
+ * multi-purpose storage provider registry. it is recommended to re-use this
+ * class as a base class for own extensions.
* @author The Apache MINA Project (dev@mina.apache.org)
*/
public class OpenStorageProviderRegistry implements StorageProviderRegistry {
@@ -65,6 +66,26 @@
}
}
+ public void add(String storageProviderFQClassname) {
+ Class<StorageProvider> storageProviderClass;
+ try {
+ storageProviderClass = (Class<StorageProvider>)Class.forName(storageProviderFQClassname);
+ } catch (ClassCastException e) {
+ System.err.println("not a Vysper storage provider class: " + storageProviderFQClassname);
+ return;
+ } catch (ClassNotFoundException e) {
+ System.err.println("could not load storage provider class " + storageProviderFQClassname);
+ return;
+ }
+ try {
+ StorageProvider storageProvider = storageProviderClass.newInstance();
+ add(storageProvider);
+ } catch (Exception e) {
+ System.err.println("failed to instantiate storage provider class " + storageProviderFQClassname);
+ return;
+ }
+ }
+
private Set<Class> getStorageProviderInterfaces(Class clazz) {
Set<Class> storageProviderInterfaces = new HashSet<Class>();
Modified: mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/StorageProviderRegistry.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/StorageProviderRegistry.java?rev=800455&r1=800454&r2=800455&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/StorageProviderRegistry.java (original)
+++ mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/StorageProviderRegistry.java Mon Aug 3 16:33:30 2009
@@ -20,11 +20,34 @@
package org.apache.vysper.storage;
/**
- *
+ * This registry bundles storage providers. It is primarily intended for
+ * grouping for one kind of underlying storage, for example in-memory, SQL
+ * or JCR, but custom mixed collections are possible.
+ *
* @author The Apache MINA Project (dev@mina.apache.org)
*/
public interface StorageProviderRegistry {
+
+ /**
+ * access the ready-to-go storage provider instance implementing the
+ * given interface
+ * @param clazz a class implementing StorageProvider
+ * @return the fully initialized storage provider
+ */
StorageProvider retrieve(Class<? extends StorageProvider> clazz);
+ /**
+ * adds a storage provider implementation to the registry
+ * @param storageProvider
+ */
void add(StorageProvider storageProvider);
+
+ /**
+ * adds a storage provider implementaton to the registry
+ * the registry is responsible for instantiating the given class
+ * @param storageProviderFullQualifiedClassname fully qualified
+ * class name of the implementation. the implementation must have a public
+ * no-argument constructor
+ */
+ void add(String storageProviderFullQualifiedClassname);
}
Modified: mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/inmemory/MemoryStorageProviderRegistry.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/inmemory/MemoryStorageProviderRegistry.java?rev=800455&r1=800454&r2=800455&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/inmemory/MemoryStorageProviderRegistry.java (original)
+++ mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/storage/inmemory/MemoryStorageProviderRegistry.java Mon Aug 3 16:33:30 2009
@@ -33,6 +33,10 @@
public MemoryStorageProviderRegistry() {
add(new SimpleUserAuthorization());
add(new MemoryRosterManager());
+
+ // provider from external modules, low coupling, fail when modules are not present
+ add("org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider.LeafNodeInMemoryStorageProvider");
+ add("org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider.CollectionnodeInMemoryStorageProvider");
}
}
\ No newline at end of file
Modified: mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerMain.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerMain.java?rev=800455&r1=800454&r2=800455&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerMain.java (original)
+++ mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerMain.java Mon Aug 3 16:33:30 2009
@@ -20,9 +20,12 @@
package org.apache.vysper.xmpp.server;
import java.io.File;
+import java.util.List;
+import java.util.ArrayList;
import org.apache.vysper.mina.TCPEndpoint;
import org.apache.vysper.storage.StorageProviderRegistry;
+import org.apache.vysper.storage.jcr.JcrStorageProviderRegistry;
import org.apache.vysper.storage.inmemory.MemoryStorageProviderRegistry;
import org.apache.vysper.xmpp.addressing.EntityFormatException;
import org.apache.vysper.xmpp.addressing.EntityImpl;
@@ -32,6 +35,8 @@
import org.apache.vysper.xmpp.modules.extension.xep0092_software_version.SoftwareVersionModule;
import org.apache.vysper.xmpp.modules.extension.xep0119_xmppping.XmppPingModule;
import org.apache.vysper.xmpp.modules.extension.xep0202_entity_time.EntityTimeModule;
+import org.apache.vysper.xmpp.modules.extension.xep0049_privatedata.PrivateDataModule;
+import org.apache.vysper.xmpp.modules.Module;
/**
* starts the server as a standalone application
@@ -42,20 +47,37 @@
/**
* boots the server as a standalone application
- * found on the classpath
+ *
+ * adding a module from the command line:
+ * using a runtime property, one or more modules can be specified, like this:
+ * -Dvysper.add.module=org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.PublishSubscribeModule,... more ...
+ *
* @param args
*/
public static void main(String[] args) throws AccountCreationException, EntityFormatException {
+ String addedModuleProperty = System.getProperty("vysper.add.module");
+ List<Module> listOfModules = null;
+ if (addedModuleProperty != null) {
+ String[] moduleClassNames = addedModuleProperty.split(",");
+ listOfModules = createModuleInstances(moduleClassNames);
+ }
+
// choose the storage you want to use
//StorageProviderRegistry providerRegistry = new JcrStorageProviderRegistry();
StorageProviderRegistry providerRegistry = new MemoryStorageProviderRegistry();
-
- final AccountManagement accountManagement = (AccountManagement) providerRegistry.retrieve(AccountManagement.class);
- if(!accountManagement.verifyAccountExists(EntityImpl.parse("user1@vysper.org"))) accountManagement.addUser("user1@vysper.org", "password1");
- if(!accountManagement.verifyAccountExists(EntityImpl.parse("user2@vysper.org"))) accountManagement.addUser("user2@vysper.org", "password1");
- if(!accountManagement.verifyAccountExists(EntityImpl.parse("user3@vysper.org"))) accountManagement.addUser("user3@vysper.org", "password1");
+ final AccountManagement accountManagement = (AccountManagement)providerRegistry.retrieve(AccountManagement.class);
+
+ if (!accountManagement.verifyAccountExists(EntityImpl.parse("user1@vysper.org"))) {
+ accountManagement.addUser("user1@vysper.org", "password1");
+ }
+ if (!accountManagement.verifyAccountExists(EntityImpl.parse("user2@vysper.org"))) {
+ accountManagement.addUser("user2@vysper.org", "password1");
+ }
+ if (!accountManagement.verifyAccountExists(EntityImpl.parse("user3@vysper.org"))) {
+ accountManagement.addUser("user3@vysper.org", "password1");
+ }
XMPPServer server = new XMPPServer("vysper.org");
server.addEndpoint(new TCPEndpoint());
@@ -75,5 +97,37 @@
server.addModule(new EntityTimeModule());
server.addModule(new VcardTempModule());
server.addModule(new XmppPingModule());
+ server.addModule(new PrivateDataModule());
+
+ if (listOfModules != null) {
+ for (Module module : listOfModules) {
+ server.addModule(module);
+ }
+ }
+ }
+
+ private static List<Module> createModuleInstances(String[] moduleClassNames) {
+ List<Module> modules = new ArrayList<Module>();
+
+ for (String moduleClassName : moduleClassNames) {
+ Class<Module> moduleClass;
+ try {
+ moduleClass = (Class<Module>)Class.forName(moduleClassName);
+ } catch (ClassCastException e) {
+ System.err.println("not a Vysper module class: " + moduleClassName);
+ continue;
+ } catch (ClassNotFoundException e) {
+ System.err.println("could not load module class " + moduleClassName);
+ continue;
+ }
+ try {
+ Module module = moduleClass.newInstance();
+ modules.add(module);
+ } catch (Exception e) {
+ System.err.println("failed to instantiate module class " + moduleClassName);
+ continue;
+ }
+ }
+ return modules;
}
}