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 <[email protected]> Authored: Mon Jul 8 11:40:57 2013 +0200 Committer: Bernd Fondermann <[email protected]> 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 ([email protected]) */ -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 ([email protected]) + */ +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); + } +}
