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 2013/07/08 11:51:48 UTC
[9/9] git commit: HBase storage: extract generic persistence manager
for XEPs like vcard and private data, add vcard storage for HBase
HBase storage: extract generic persistence manager for XEPs like vcard and private data, add vcard storage for HBase
Project: http://git-wip-us.apache.org/repos/asf/mina-vysper/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-vysper/commit/9ffe7f30
Tree: http://git-wip-us.apache.org/repos/asf/mina-vysper/tree/9ffe7f30
Diff: http://git-wip-us.apache.org/repos/asf/mina-vysper/diff/9ffe7f30
Branch: refs/heads/master
Commit: 9ffe7f302900bad22c52e90cb098f31c4f19b0ad
Parents: 1b50d19
Author: Bernd Fondermann <be...@brainlounge.de>
Authored: Mon Jul 8 11:40:57 2013 +0200
Committer: Bernd Fondermann <be...@brainlounge.de>
Committed: Mon Jul 8 11:40:57 2013 +0200
----------------------------------------------------------------------
.../hbase/HBaseGenericXEPDataManager.java | 76 ++++++++++++++++++++
.../hbase/HBaseStorageProviderRegistry.java | 2 +
.../HBasePrivateDataPersistenceManager.java | 59 ++-------------
.../vcard/HBaseVcardTempPersistenceManager.java | 56 +++++++++++++++
4 files changed, 140 insertions(+), 53 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/9ffe7f30/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseGenericXEPDataManager.java
----------------------------------------------------------------------
diff --git a/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseGenericXEPDataManager.java b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseGenericXEPDataManager.java
new file mode 100644
index 0000000..54416a2
--- /dev/null
+++ b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseGenericXEPDataManager.java
@@ -0,0 +1,76 @@
+package org.apache.vysper.storage.hbase;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.hadoop.hbase.client.HTableInterface;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.client.Result;
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+import static org.apache.vysper.storage.hbase.HBaseStorage.COLUMN_FAMILY_NAME_XEP;
+import static org.apache.vysper.storage.hbase.HBaseStorage.COLUMN_FAMILY_NAME_XEP_BYTES;
+import static org.apache.vysper.storage.hbase.HBaseStorage.TABLE_NAME_USER;
+import static org.apache.vysper.storage.hbase.HBaseUtils.asBytes;
+import static org.apache.vysper.storage.hbase.HBaseUtils.entityAsBytes;
+import static org.apache.vysper.storage.hbase.HBaseUtils.toStr;
+
+/**
+ */
+public abstract class HBaseGenericXEPDataManager {
+ final Logger logger = LoggerFactory.getLogger(HBaseGenericXEPDataManager.class);
+
+ protected HBaseStorage hbaseStorage;
+
+ public HBaseGenericXEPDataManager(HBaseStorage hbaseStorage) {
+ this.hbaseStorage = hbaseStorage;
+ }
+
+ protected abstract String getNamespace();
+
+ protected String getColumnForKey(String key) {
+ return getNamespace() + "#"+ key;
+ }
+
+ public boolean isAvailable() {
+ HTableInterface table = null;
+ try {
+ table = hbaseStorage.getTable(TABLE_NAME_USER);
+ return table != null;
+ } finally {
+ hbaseStorage.putTable(table);
+ }
+ }
+
+ protected boolean setValue(Entity entity, String key, String xml) {
+ if (key == null || StringUtils.isBlank(key)) {
+ throw new IllegalArgumentException("key must not be blank, empty or null");
+ }
+ String column = getColumnForKey(key);
+
+ final Put put = new Put(entityAsBytes(entity.getBareJID()));
+ put.add(COLUMN_FAMILY_NAME_XEP_BYTES, asBytes(column), asBytes(xml));
+
+ HTableInterface table = null;
+ try {
+ table = hbaseStorage.getTable(TABLE_NAME_USER);
+ table.put(put);
+ logger.debug("stored private data for {} with key {}", entity, key);
+ return true;
+ } catch (IOException e) {
+ logger.warn("failed to save private data for {} with key {}", entity, key);
+ return false;
+ } finally {
+ hbaseStorage.putTable(table);
+ }
+ }
+
+ protected String getValue(Entity entity, String key) {
+ final Result entityRow = hbaseStorage.getEntityRow(entity, COLUMN_FAMILY_NAME_XEP);
+
+ String column = getColumnForKey(key);
+ return toStr(entityRow.getValue(COLUMN_FAMILY_NAME_XEP_BYTES, asBytes(column)));
+ }
+}
http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/9ffe7f30/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseStorageProviderRegistry.java
----------------------------------------------------------------------
diff --git a/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseStorageProviderRegistry.java b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseStorageProviderRegistry.java
index 5b86ad4..509dc7a 100644
--- a/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseStorageProviderRegistry.java
+++ b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseStorageProviderRegistry.java
@@ -23,6 +23,7 @@ import org.apache.vysper.storage.OpenStorageProviderRegistry;
import org.apache.vysper.storage.hbase.privatedata.HBasePrivateDataPersistenceManager;
import org.apache.vysper.storage.hbase.roster.HBaseRosterManager;
import org.apache.vysper.storage.hbase.user.HBaseUserManagement;
+import org.apache.vysper.storage.hbase.vcard.HBaseVcardTempPersistenceManager;
/**
*
@@ -34,6 +35,7 @@ public class HBaseStorageProviderRegistry extends OpenStorageProviderRegistry {
add(new HBaseUserManagement(HBaseStorage.getInstance()));
add(new HBaseRosterManager(HBaseStorage.getInstance()));
add(new HBasePrivateDataPersistenceManager(HBaseStorage.getInstance()));
+ add(new HBaseVcardTempPersistenceManager(HBaseStorage.getInstance()));
}
}
http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/9ffe7f30/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/privatedata/HBasePrivateDataPersistenceManager.java
----------------------------------------------------------------------
diff --git a/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/privatedata/HBasePrivateDataPersistenceManager.java b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/privatedata/HBasePrivateDataPersistenceManager.java
index 4024b59..322bb77 100644
--- a/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/privatedata/HBasePrivateDataPersistenceManager.java
+++ b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/privatedata/HBasePrivateDataPersistenceManager.java
@@ -19,10 +19,7 @@
*/
package org.apache.vysper.storage.hbase.privatedata;
-import org.apache.commons.lang.StringUtils;
-import org.apache.hadoop.hbase.client.HTableInterface;
-import org.apache.hadoop.hbase.client.Put;
-import org.apache.hadoop.hbase.client.Result;
+import org.apache.vysper.storage.hbase.HBaseGenericXEPDataManager;
import org.apache.vysper.storage.hbase.HBaseStorage;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.extension.xep0049_privatedata.PrivateDataPersistenceManager;
@@ -30,73 +27,29 @@ import org.apache.vysper.xmpp.protocol.NamespaceURIs;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
-
-import static org.apache.vysper.storage.hbase.HBaseStorage.*;
-import static org.apache.vysper.storage.hbase.HBaseUtils.*;
-
/**
* @author The Apache MINA Project (dev@mina.apache.org)
*/
-public class HBasePrivateDataPersistenceManager implements PrivateDataPersistenceManager {
+public class HBasePrivateDataPersistenceManager extends HBaseGenericXEPDataManager implements PrivateDataPersistenceManager {
final Logger logger = LoggerFactory.getLogger(HBasePrivateDataPersistenceManager.class);
- protected HBaseStorage hbaseStorage;
-
public HBasePrivateDataPersistenceManager(HBaseStorage hbaseStorage) {
- this.hbaseStorage = hbaseStorage;
+ super(hbaseStorage);
}
+ @Override
protected String getNamespace() {
return NamespaceURIs.PRIVATE_DATA;
}
-
- public boolean isAvailable() {
- HTableInterface table = null;
- try {
- table = hbaseStorage.getTable(TABLE_NAME_USER);
- return table != null;
- } finally {
- hbaseStorage.putTable(table);
- }
- }
public String getPrivateData(Entity entity, String key) {
- final Result entityRow = hbaseStorage.getEntityRow(entity, COLUMN_FAMILY_NAME_XEP);
-
- String column = getColumnForKey(key);
- String value = toStr(entityRow.getValue(COLUMN_FAMILY_NAME_XEP_BYTES, asBytes(column)));
-
+ String value = getValue(entity, key);
return value;
}
- protected String getColumnForKey(String key) {
- return getNamespace() + "#"+ key;
- }
-
public boolean setPrivateData(Entity entity, String key, String xml) {
-
- if (key == null || StringUtils.isBlank(key)) {
- throw new IllegalArgumentException("private data key must not be blank");
- }
- String column = getColumnForKey(key);
-
- final Put put = new Put(entityAsBytes(entity.getBareJID()));
- put.add(COLUMN_FAMILY_NAME_XEP_BYTES, asBytes(column), asBytes(xml));
-
- HTableInterface table = null;
- try {
- table = hbaseStorage.getTable(TABLE_NAME_USER);
- table.put(put);
- logger.debug("stored private data for {} with key {}", entity, key);
- return true;
- } catch (IOException e) {
- logger.warn("failed to save private data for {} with key {}", entity, key);
- return false;
- } finally {
- hbaseStorage.putTable(table);
- }
+ return setValue(entity, key, xml);
}
}
http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/9ffe7f30/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/vcard/HBaseVcardTempPersistenceManager.java
----------------------------------------------------------------------
diff --git a/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/vcard/HBaseVcardTempPersistenceManager.java b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/vcard/HBaseVcardTempPersistenceManager.java
new file mode 100644
index 0000000..550f8af
--- /dev/null
+++ b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/vcard/HBaseVcardTempPersistenceManager.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.vysper.storage.hbase.vcard;
+
+import org.apache.vysper.storage.hbase.HBaseGenericXEPDataManager;
+import org.apache.vysper.storage.hbase.HBaseStorage;
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.modules.extension.xep0054_vcardtemp.VcardTempPersistenceManager;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ */
+public class HBaseVcardTempPersistenceManager extends HBaseGenericXEPDataManager implements VcardTempPersistenceManager {
+
+ final Logger logger = LoggerFactory.getLogger(HBaseVcardTempPersistenceManager.class);
+
+ private static final String KEY = "vcard";
+
+ public HBaseVcardTempPersistenceManager(HBaseStorage hbaseStorage) {
+ super(hbaseStorage);
+ }
+
+ @Override
+ protected String getNamespace() {
+ return NamespaceURIs.VCARD_TEMP;
+ }
+
+ public String getVcard(Entity entity) {
+ return getValue(entity, KEY);
+ }
+
+ public boolean setVcard(Entity entity, String xml) {
+ return setValue(entity, KEY, xml);
+ }
+}