You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by er...@apache.org on 2011/08/06 14:08:55 UTC
svn commit: r1154497 - in /james/server/trunk/hbase: ./ src/ src/main/
src/main/java/ src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/james/ src/main/java/org/apache/james/domainlist/
src/main/java/org/apache/james/domainlist/hbas...
Author: eric
Date: Sat Aug 6 12:08:54 2011
New Revision: 1154497
URL: http://svn.apache.org/viewvc?rev=1154497&view=rev
Log:
Bulk initial commit for HBase user and domain persistence - Missing: javadoc, rrt wilcard, rrt recursive and rrt alias (JAMES-1273)
Added:
james/server/trunk/hbase/
james/server/trunk/hbase/pom.xml
james/server/trunk/hbase/src/
james/server/trunk/hbase/src/main/
james/server/trunk/hbase/src/main/java/
james/server/trunk/hbase/src/main/java/org/
james/server/trunk/hbase/src/main/java/org/apache/
james/server/trunk/hbase/src/main/java/org/apache/james/
james/server/trunk/hbase/src/main/java/org/apache/james/domainlist/
james/server/trunk/hbase/src/main/java/org/apache/james/domainlist/hbase/
james/server/trunk/hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java
james/server/trunk/hbase/src/main/java/org/apache/james/domainlist/hbase/def/
james/server/trunk/hbase/src/main/java/org/apache/james/domainlist/hbase/def/HDomainList.java
james/server/trunk/hbase/src/main/java/org/apache/james/rrt/
james/server/trunk/hbase/src/main/java/org/apache/james/rrt/hbase/
james/server/trunk/hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java
james/server/trunk/hbase/src/main/java/org/apache/james/rrt/hbase/def/
james/server/trunk/hbase/src/main/java/org/apache/james/rrt/hbase/def/HRecipientRewriteTable.java
james/server/trunk/hbase/src/main/java/org/apache/james/system/
james/server/trunk/hbase/src/main/java/org/apache/james/system/hbase/
james/server/trunk/hbase/src/main/java/org/apache/james/system/hbase/TablePool.java
james/server/trunk/hbase/src/main/java/org/apache/james/user/
james/server/trunk/hbase/src/main/java/org/apache/james/user/hbase/
james/server/trunk/hbase/src/main/java/org/apache/james/user/hbase/HBaseUsersRepository.java
james/server/trunk/hbase/src/main/java/org/apache/james/user/hbase/def/
james/server/trunk/hbase/src/main/java/org/apache/james/user/hbase/def/HUsersRepository.java
james/server/trunk/hbase/src/main/resources/
james/server/trunk/hbase/src/test/
james/server/trunk/hbase/src/test/java/
james/server/trunk/hbase/src/test/java/org/
james/server/trunk/hbase/src/test/java/org/apache/
james/server/trunk/hbase/src/test/java/org/apache/james/
james/server/trunk/hbase/src/test/java/org/apache/james/JamesServerHBaseIntegrationTest.java
james/server/trunk/hbase/src/test/java/org/apache/james/domainlist/
james/server/trunk/hbase/src/test/java/org/apache/james/domainlist/hbase/
james/server/trunk/hbase/src/test/java/org/apache/james/domainlist/hbase/HBaseDomainListTest.java
james/server/trunk/hbase/src/test/java/org/apache/james/rrt/
james/server/trunk/hbase/src/test/java/org/apache/james/rrt/hbase/
james/server/trunk/hbase/src/test/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTableTest.java
james/server/trunk/hbase/src/test/java/org/apache/james/system/
james/server/trunk/hbase/src/test/java/org/apache/james/system/hbase/
james/server/trunk/hbase/src/test/java/org/apache/james/system/hbase/TablePoolTest.java
james/server/trunk/hbase/src/test/java/org/apache/james/user/
james/server/trunk/hbase/src/test/java/org/apache/james/user/hbase/
james/server/trunk/hbase/src/test/java/org/apache/james/user/hbase/HBaseUsersRepositoryTest.java
james/server/trunk/hbase/src/test/resources/
james/server/trunk/hbase/src/test/resources/log4j.properties
Added: james/server/trunk/hbase/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/pom.xml?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/pom.xml (added)
+++ james/server/trunk/hbase/pom.xml Sat Aug 6 12:08:54 2011
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="ISO-8859-15"?>
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <artifactId>james-server</artifactId>
+ <groupId>org.apache.james</groupId>
+ <version>3.0-beta4-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-server-hbase</artifactId>
+ <name>Apache James Server HBase Data Persistence</name>
+
+ <properties>
+ <hbase.version>0.90.3</hbase.version>
+ <hadoop.version>0.20-append-r1057313</hadoop.version>
+ <junit.version>4.8.2</junit.version>
+ </properties>
+
+<!--
+ TODO Move some definitions to server parent.
+-->
+
+ <repositories>
+ <repository>
+ <id>hadoop-non-releases</id>
+ <name>Hadoop non-releases</name>
+ <url>http://people.apache.org/~rawson/repo/</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ </repository>
+ </repositories>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+<!--
+Inherit configuration from parent pom.
+-->
+ <executions>
+ <execution>
+ <goals>
+ <goal>jar</goal>
+<!--
+Allow tests to be used by other modules.
+Parent pom build failure prevents inheritance.
+-->
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <forkMode>pertest</forkMode>
+ <argLine>-Xms256m -Xmx512m</argLine>
+ <testFailureIgnore>false</testFailureIgnore>
+ <skip>false</skip>
+ <includes>
+ <include>**/*IntegrationTest.java</include>
+ </includes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-server-lifecycle-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-server-dnsservice-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-server-data-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-server-data-library</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-configuration</groupId>
+ <artifactId>commons-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hbase</groupId>
+ <artifactId>hbase</artifactId>
+ <version>${hbase.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+
+ <!-- Test dependencies -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ <version>${junit.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-server-data-library</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-server-dnsservice-api</artifactId>
+ <scope>test</scope>
+ <type>test-jar</type>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hbase</groupId>
+ <artifactId>hbase</artifactId>
+ <scope>test</scope>
+ <type>test-jar</type>
+ <version>${hbase.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-test</artifactId>
+ <scope>test</scope>
+ <version>${hadoop.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+</project>
Added: james/server/trunk/hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java (added)
+++ james/server/trunk/hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java Sat Aug 6 12:08:54 2011
@@ -0,0 +1,147 @@
+/****************************************************************
+ * 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.james.domainlist.hbase;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.hadoop.hbase.client.Delete;
+import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.client.ResultScanner;
+import org.apache.hadoop.hbase.client.Scan;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.james.domainlist.api.DomainListException;
+import org.apache.james.domainlist.hbase.def.HDomainList;
+import org.apache.james.domainlist.lib.AbstractDomainList;
+import org.apache.james.system.hbase.TablePool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class HBaseDomainList extends AbstractDomainList {
+
+ private static Logger log = LoggerFactory.getLogger(HBaseDomainList.class.getName());
+
+ @Override
+ public boolean containsDomain(String domain) throws DomainListException {
+ HTable table = null;
+ try {
+ table = TablePool.getInstance().getDomainlistTable();
+ Get get = new Get(Bytes.toBytes(domain));
+ Result result = table.get(get);
+ if (! result.isEmpty()) {
+ return true;
+ }
+ } catch (IOException e) {
+ log.error("Error while counting domains from HBase", e);
+ throw new DomainListException("Error while counting domains from HBase", e);
+ } finally {
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public void addDomain(String domain) throws DomainListException {
+ HTable table = null;
+ try {
+ table = TablePool.getInstance().getDomainlistTable();
+ Put put = new Put(Bytes.toBytes(domain));
+ put.add(HDomainList.COLUMN_FAMILY_NAME, HDomainList.COLUMN.DOMAIN, null);
+ table.put(put);
+ table.flushCommits();
+ } catch (IOException e) {
+ log.error("Error while adding domain in HBase", e);
+ throw new DomainListException("Error while adding domain in HBase", e);
+ } finally {
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ }
+
+ @Override
+ public void removeDomain(String domain) throws DomainListException {
+ HTable table = null;
+ try {
+ table = TablePool.getInstance().getDomainlistTable();
+ Delete delete = new Delete(Bytes.toBytes(domain));
+ table.delete(delete);
+ table.flushCommits();
+ } catch (IOException e) {
+ log.error("Error while deleting user from HBase", e);
+ throw new DomainListException("Error while deleting domain from HBase", e);
+ } finally {
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ }
+
+ @Override
+ protected List<String> getDomainListInternal() throws DomainListException {
+ List<String> list = new ArrayList<String>();
+ HTable table = null;
+ ResultScanner resultScanner = null;
+ try {
+ table = TablePool.getInstance().getDomainlistTable();
+ Scan scan = new Scan();
+ scan.addFamily(HDomainList.COLUMN_FAMILY_NAME);
+ scan.setCaching(table.getScannerCaching() * 2);
+ resultScanner = table.getScanner(scan);
+ Result result = null;
+ while ((result = resultScanner.next()) != null) {
+ list.add(Bytes.toString(result.getRow()));
+ }
+ } catch (IOException e) {
+ log.error("Error while counting domains from HBase", e);
+ throw new DomainListException("Error while counting domains from HBase", e);
+ } finally {
+ if (resultScanner != null) {
+ resultScanner.close();
+ }
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ return list;
+ }
+
+}
Added: james/server/trunk/hbase/src/main/java/org/apache/james/domainlist/hbase/def/HDomainList.java
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/src/main/java/org/apache/james/domainlist/hbase/def/HDomainList.java?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/src/main/java/org/apache/james/domainlist/hbase/def/HDomainList.java (added)
+++ james/server/trunk/hbase/src/main/java/org/apache/james/domainlist/hbase/def/HDomainList.java Sat Aug 6 12:08:54 2011
@@ -0,0 +1,32 @@
+/****************************************************************
+ * 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.james.domainlist.hbase.def;
+
+import org.apache.hadoop.hbase.util.Bytes;
+
+public interface HDomainList {
+
+ byte[] TABLE_NAME = Bytes.toBytes("JAMES_DOMAINLIST");
+ byte[] COLUMN_FAMILY_NAME = Bytes.toBytes("JAMES_DOMAINLIST");
+
+ public interface COLUMN {
+ byte [] DOMAIN = Bytes.toBytes("dom");
+ }
+
+}
Added: james/server/trunk/hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java (added)
+++ james/server/trunk/hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java Sat Aug 6 12:08:54 2011
@@ -0,0 +1,220 @@
+/****************************************************************
+ * 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.james.rrt.hbase;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.client.Delete;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.client.ResultScanner;
+import org.apache.hadoop.hbase.client.Scan;
+import org.apache.hadoop.hbase.filter.BinaryComparator;
+import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
+import org.apache.hadoop.hbase.filter.Filter;
+import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.james.rrt.api.RecipientRewriteTableException;
+import org.apache.james.rrt.hbase.def.HRecipientRewriteTable;
+import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
+import org.apache.james.system.hbase.TablePool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable {
+
+ private static Logger log = LoggerFactory.getLogger(HBaseRecipientRewriteTable.class.getName());
+
+ @Override
+ protected void addMappingInternal(String user, String domain, String mapping) throws RecipientRewriteTableException {
+ HTable table = null;
+ try {
+ table = TablePool.getInstance().getRecipientRewriteTable();
+ Put put = new Put(Bytes.toBytes(mapping));
+ put.add(HRecipientRewriteTable.COLUMN_FAMILY_NAME, Bytes.toBytes(user), Bytes.toBytes(domain));
+ table.put(put);
+ table.flushCommits();
+ } catch (IOException e) {
+ log.error("Error while adding mapping in HBase", e);
+ throw new RecipientRewriteTableException("Error while adding mapping in HBase", e);
+ } finally {
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void removeMappingInternal(String user, String domain, String mapping) throws RecipientRewriteTableException {
+ HTable table = null;
+ try {
+ table = TablePool.getInstance().getRecipientRewriteTable();
+ Delete delete = new Delete(Bytes.toBytes(mapping));
+ delete.deleteColumn(HRecipientRewriteTable.COLUMN_FAMILY_NAME, Bytes.toBytes(user));
+ table.delete(delete);
+ table.flushCommits();
+ } catch (IOException e) {
+ log.error("Error while removing mapping from HBase", e);
+ throw new RecipientRewriteTableException("Error while removing mapping from HBase", e);
+ } finally {
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ }
+
+ @Override
+ protected Collection<String> getUserDomainMappingsInternal(String user, String domain) throws RecipientRewriteTableException {
+ HTable table = null;
+ List<String> list = new ArrayList<String>();
+ ResultScanner resultScanner = null;
+ try {
+ table = TablePool.getInstance().getRecipientRewriteTable();
+ Scan scan = new Scan();
+ scan.addFamily(HRecipientRewriteTable.COLUMN_FAMILY_NAME);
+ scan.setCaching(table.getScannerCaching() * 2);
+ Filter filter = new SingleColumnValueFilter(HRecipientRewriteTable.COLUMN_FAMILY_NAME, Bytes.toBytes(user), CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(user)));
+ scan.setFilter(filter);
+ resultScanner = table.getScanner(scan);
+ Result result = null;
+ while ((result = resultScanner.next()) != null) {
+ list.add(Bytes.toString(result.getRow()));
+ }
+ } catch (IOException e) {
+ log.error("Error while getting user domain mapping in HBase", e);
+ throw new RecipientRewriteTableException("Error while getting user domain mapping in HBase", e);
+ } finally {
+ if (resultScanner != null) {
+ resultScanner.close();
+ }
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ return list;
+ }
+
+ @Override
+ protected Map<String, Collection<String>> getAllMappingsInternal() throws RecipientRewriteTableException {
+ HTable table = null;
+ ResultScanner resultScanner = null;
+ Map<String, Collection<String>> map = null;
+ try {
+ table = TablePool.getInstance().getRecipientRewriteTable();
+ Scan scan = new Scan();
+ scan.addFamily(HRecipientRewriteTable.COLUMN_FAMILY_NAME);
+ scan.setCaching(table.getScannerCaching() * 2);
+ resultScanner = table.getScanner(scan);
+ Result result = null;
+ while ((result = resultScanner.next()) != null) {
+ List<KeyValue> keyValues = result.list();
+ if (keyValues != null) {
+ for (KeyValue keyValue: keyValues) {
+ byte[] user = keyValue.getQualifier();
+ byte[] domain = keyValue.getValue();
+ String email = Bytes.toString(user) + '@' + Bytes.toString(domain);
+ if (map == null) {
+ map = new HashMap<String, Collection<String>>();
+ }
+ Collection<String> list = map.get(email);
+ if (list == null) {
+ list = new ArrayList<String>();
+ }
+ list.add(Bytes.toString(keyValue.getRow()));
+ map.put(email, list);
+ }
+ }
+ }
+ } catch (IOException e) {
+ log.error("Error while getting all mapping from HBase", e);
+ throw new RecipientRewriteTableException("Error while getting all mappings from HBase", e);
+ } finally {
+ if (resultScanner != null) {
+ resultScanner.close();
+ }
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ return map;
+ }
+
+ @Override
+ protected String mapAddressInternal(String user, String domain) throws RecipientRewriteTableException {
+ HTable table = null;
+ ResultScanner resultScanner = null;
+ StringBuffer mappingBuffer = new StringBuffer();
+ try {
+ table = TablePool.getInstance().getRecipientRewriteTable();
+ Scan scan = new Scan();
+ scan.addFamily(HRecipientRewriteTable.COLUMN_FAMILY_NAME);
+ scan.setCaching(table.getScannerCaching() * 2);
+ Filter filter = new SingleColumnValueFilter(HRecipientRewriteTable.COLUMN_FAMILY_NAME, Bytes.toBytes(user), CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(domain)));
+ scan.setFilter(filter);
+ resultScanner = table.getScanner(scan);
+ Result result = null;
+ while ((result = resultScanner.next()) != null) {
+ mappingBuffer.append(Bytes.toString(result.getRow()) + ";");
+ }
+ } catch (IOException e) {
+ log.error("Error while mapping address in HBase", e);
+ throw new RecipientRewriteTableException("Error while mapping address in HBase", e);
+ } finally {
+ if (resultScanner != null) {
+ resultScanner.close();
+ }
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ if (mappingBuffer.length() == 0) {
+ return null;
+ }
+ String mapping = mappingBuffer.toString();
+ return mapping.substring(0, mapping.length() - 1);
+ }
+
+}
Added: james/server/trunk/hbase/src/main/java/org/apache/james/rrt/hbase/def/HRecipientRewriteTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/src/main/java/org/apache/james/rrt/hbase/def/HRecipientRewriteTable.java?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/src/main/java/org/apache/james/rrt/hbase/def/HRecipientRewriteTable.java (added)
+++ james/server/trunk/hbase/src/main/java/org/apache/james/rrt/hbase/def/HRecipientRewriteTable.java Sat Aug 6 12:08:54 2011
@@ -0,0 +1,28 @@
+/****************************************************************
+ * 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.james.rrt.hbase.def;
+
+import org.apache.hadoop.hbase.util.Bytes;
+
+public interface HRecipientRewriteTable {
+
+ byte[] TABLE_NAME = Bytes.toBytes("JAMES_RRT");
+ byte[] COLUMN_FAMILY_NAME = Bytes.toBytes("JAMES_RRT");
+
+}
Added: james/server/trunk/hbase/src/main/java/org/apache/james/system/hbase/TablePool.java
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/src/main/java/org/apache/james/system/hbase/TablePool.java?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/src/main/java/org/apache/james/system/hbase/TablePool.java (added)
+++ james/server/trunk/hbase/src/main/java/org/apache/james/system/hbase/TablePool.java Sat Aug 6 12:08:54 2011
@@ -0,0 +1,87 @@
+/****************************************************************
+ * 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.james.system.hbase;
+
+import java.io.IOException;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.HBaseConfiguration;
+import org.apache.hadoop.hbase.HColumnDescriptor;
+import org.apache.hadoop.hbase.HTableDescriptor;
+import org.apache.hadoop.hbase.client.HBaseAdmin;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.HTablePool;
+import org.apache.james.domainlist.hbase.def.HDomainList;
+import org.apache.james.rrt.hbase.def.HRecipientRewriteTable;
+import org.apache.james.user.hbase.def.HUsersRepository;
+
+public class TablePool {
+
+ private static Configuration configuration;
+ private static TablePool hbaseSchema;
+ private static HTablePool htablePool;
+
+ public static TablePool getInstance() throws IOException {
+ return getInstance(HBaseConfiguration.create());
+ }
+
+ public static TablePool getInstance(Configuration configuration) throws IOException {
+ if (hbaseSchema == null) {
+ TablePool.configuration = configuration;
+ TablePool.hbaseSchema = new TablePool();
+ TablePool.htablePool = new HTablePool(configuration, 100);
+ ensureTable(HDomainList.TABLE_NAME, HDomainList.COLUMN_FAMILY_NAME);
+ ensureTable(HRecipientRewriteTable.TABLE_NAME, HRecipientRewriteTable.COLUMN_FAMILY_NAME);
+ ensureTable(HUsersRepository.TABLE_NAME, HUsersRepository.COLUMN_FAMILY_NAME);
+ }
+ return hbaseSchema;
+ }
+
+ public HTable getDomainlistTable() {
+ return (HTable) htablePool.getTable(HDomainList.TABLE_NAME);
+ }
+
+ public HTable getRecipientRewriteTable() {
+ return (HTable) htablePool.getTable(HRecipientRewriteTable.TABLE_NAME);
+ }
+
+ public HTable getUsersRepositoryTable() {
+ return (HTable) htablePool.getTable(HUsersRepository.TABLE_NAME);
+ }
+
+ // With later HBase versions, we won't have to put back the table in the pool.
+ // See https://issues.apache.org/jira/browse/HBASE-4054
+ public void putTable(HTable table) {
+ if (table != null) {
+ htablePool.putTable(table);
+ }
+ }
+
+ private static void ensureTable(byte[] tableName, byte[] columnFamilyName) throws IOException {
+ HBaseAdmin hbaseAdmin = new HBaseAdmin(configuration);
+ if (! hbaseAdmin.tableExists(tableName)) {
+ HTableDescriptor desc = new HTableDescriptor(tableName);
+ HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(columnFamilyName);
+ hColumnDescriptor.setMaxVersions(1);
+ desc.addFamily(hColumnDescriptor);
+ hbaseAdmin.createTable(desc);
+ }
+ }
+
+}
Added: james/server/trunk/hbase/src/main/java/org/apache/james/user/hbase/HBaseUsersRepository.java
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/src/main/java/org/apache/james/user/hbase/HBaseUsersRepository.java?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/src/main/java/org/apache/james/user/hbase/HBaseUsersRepository.java (added)
+++ james/server/trunk/hbase/src/main/java/org/apache/james/user/hbase/HBaseUsersRepository.java Sat Aug 6 12:08:54 2011
@@ -0,0 +1,243 @@
+/****************************************************************
+ * 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.james.user.hbase;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.client.Delete;
+import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.client.ResultScanner;
+import org.apache.hadoop.hbase.client.Scan;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.james.system.hbase.TablePool;
+import org.apache.james.user.api.UsersRepositoryException;
+import org.apache.james.user.api.model.User;
+import org.apache.james.user.hbase.def.HUsersRepository;
+import org.apache.james.user.lib.AbstractUsersRepository;
+import org.apache.james.user.lib.model.DefaultUser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class HBaseUsersRepository extends AbstractUsersRepository {
+
+ private static Logger log = LoggerFactory.getLogger(HBaseUsersRepository.class.getName());
+
+ private String algo;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.james.user.lib.AbstractUsersRepository#doConfigure(org.apache.commons.configuration.HierarchicalConfiguration)
+ */
+ public void doConfigure(HierarchicalConfiguration config) throws ConfigurationException {
+ algo = config.getString("algorithm", "MD5");
+ super.doConfigure(config);
+ }
+
+ @Override
+ public User getUserByName(String name) throws UsersRepositoryException {
+ KeyValue keyValue = getKeyValue(name);
+ User user = null;
+ if (keyValue != null) {
+ user = new DefaultUser(Bytes.toString(keyValue.getRow()), Bytes.toString(keyValue.getValue()), algo);
+ }
+ return user;
+ }
+
+ @Override
+ public void updateUser(User user) throws UsersRepositoryException {
+ if (user == null) {
+ throw new UsersRepositoryException("Please provide a non null user");
+ }
+ if (! (user instanceof DefaultUser)) {
+ throw new UsersRepositoryException("Please provide a user instanceof DefaultUser");
+ }
+ User existingUser = getUserByName(user.getUserName());
+ if (existingUser == null) {
+ throw new UsersRepositoryException("Please provide an existing user to update");
+ }
+ putUser((DefaultUser) user);
+ }
+
+ @Override
+ public void removeUser(String name) throws UsersRepositoryException {
+ HTable table = null;
+ try {
+ table = TablePool.getInstance().getUsersRepositoryTable();
+ Delete delete = new Delete(Bytes.toBytes(name));
+ table.delete(delete);
+ table.flushCommits();
+ } catch (IOException e) {
+ log.error("Error while deleting user from HBase", e);
+ throw new UsersRepositoryException("Error while deleting user from HBase", e);
+ } finally {
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ }
+
+ @Override
+ public boolean contains(String name) throws UsersRepositoryException {
+ KeyValue keyValue = getKeyValue(name);
+ return (keyValue != null);
+ }
+
+ @Override
+ public boolean test(String name, String password) throws UsersRepositoryException {
+ KeyValue keyValue = getKeyValue(name);
+ if (keyValue != null) {
+ DefaultUser user = new DefaultUser(name, algo);
+ user.setPassword(password);
+ return Bytes.toString(keyValue.getValue()).equals(user.getHashedPassword());
+ }
+ return false;
+ }
+
+ @Override
+ public int countUsers() throws UsersRepositoryException {
+ HTable table = null;
+ ResultScanner resultScanner = null;
+ try {
+ table = TablePool.getInstance().getUsersRepositoryTable();
+ Scan scan = new Scan();
+ scan.addFamily(HUsersRepository.COLUMN_FAMILY_NAME);
+ scan.setCaching(table.getScannerCaching() * 2);
+ resultScanner = table.getScanner(scan);
+ int resultCount = 0;
+ Result result = null;
+ while ((result = resultScanner.next()) != null) {
+ resultCount++;
+ }
+ return resultCount;
+ } catch (IOException e) {
+ log.error("Error while counting users from HBase", e);
+ throw new UsersRepositoryException("Error while counting users from HBase", e);
+ } finally {
+ if (resultScanner != null) {
+ resultScanner.close();
+ }
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ }
+
+ @Override
+ public Iterator<String> list() throws UsersRepositoryException {
+ List<String> list = new ArrayList<String>();
+ HTable table = null;
+ ResultScanner resultScanner = null;
+ try {
+ table = TablePool.getInstance().getUsersRepositoryTable();
+ Scan scan = new Scan();
+ scan.addFamily(HUsersRepository.COLUMN_FAMILY_NAME);
+ scan.setCaching(table.getScannerCaching() * 2);
+ resultScanner = table.getScanner(scan);
+ Result result = null;
+ while ((result = resultScanner.next()) != null) {
+ list.add(Bytes.toString(result.getRow()));
+ }
+ } catch (IOException e) {
+ log.error("Error while scanning users from HBase", e);
+ throw new UsersRepositoryException("Error while scanning users from HBase", e);
+ } finally {
+ if (resultScanner != null) {
+ resultScanner.close();
+ }
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ return list.iterator();
+ }
+
+ @Override
+ protected void doAddUser(String username, String password) throws UsersRepositoryException {
+ DefaultUser user = new DefaultUser(username, algo);
+ user.setPassword(password);
+ putUser(user);
+ }
+
+ private KeyValue getKeyValue(String username) throws UsersRepositoryException {
+ HTable table = null;
+ try {
+ table = TablePool.getInstance().getUsersRepositoryTable();
+ Get get = new Get(Bytes.toBytes(username));
+ Result result = table.get(get);
+ KeyValue keyValue = result.getColumnLatest(HUsersRepository.COLUMN_FAMILY_NAME, HUsersRepository.COLUMN.PWD);
+ return keyValue;
+ } catch (IOException e) {
+ log.error("Error while counting users from HBase", e);
+ throw new UsersRepositoryException("Error while counting users from HBase", e);
+ } finally {
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ }
+
+ private void putUser(DefaultUser user) throws UsersRepositoryException {
+ HTable table = null;
+ try {
+ table = TablePool.getInstance().getUsersRepositoryTable();
+ Put put = new Put(Bytes.toBytes(user.getUserName()));
+ put.add(HUsersRepository.COLUMN_FAMILY_NAME, HUsersRepository.COLUMN.PWD, Bytes.toBytes(user.getHashedPassword()));
+ table.put(put);
+ table.flushCommits();
+ } catch (IOException e) {
+ log.error("Error while adding user in HBase", e);
+ throw new UsersRepositoryException("Error while adding user in HBase", e);
+ } finally {
+ if (table != null) {
+ try {
+ TablePool.getInstance().putTable(table);
+ } catch (IOException e) {
+ // Do nothing, we can't get access to the HBaseSchema.
+ }
+ }
+ }
+ }
+
+}
Added: james/server/trunk/hbase/src/main/java/org/apache/james/user/hbase/def/HUsersRepository.java
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/src/main/java/org/apache/james/user/hbase/def/HUsersRepository.java?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/src/main/java/org/apache/james/user/hbase/def/HUsersRepository.java (added)
+++ james/server/trunk/hbase/src/main/java/org/apache/james/user/hbase/def/HUsersRepository.java Sat Aug 6 12:08:54 2011
@@ -0,0 +1,32 @@
+/****************************************************************
+ * 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.james.user.hbase.def;
+
+import org.apache.hadoop.hbase.util.Bytes;
+
+public interface HUsersRepository {
+
+ byte[] TABLE_NAME = Bytes.toBytes("JAMES_USERS");
+ byte[] COLUMN_FAMILY_NAME = Bytes.toBytes("JAMES_USERS");
+
+ public interface COLUMN {
+ byte [] PWD = Bytes.toBytes("pwd");
+ }
+
+}
Added: james/server/trunk/hbase/src/test/java/org/apache/james/JamesServerHBaseIntegrationTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/src/test/java/org/apache/james/JamesServerHBaseIntegrationTest.java?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/src/test/java/org/apache/james/JamesServerHBaseIntegrationTest.java (added)
+++ james/server/trunk/hbase/src/test/java/org/apache/james/JamesServerHBaseIntegrationTest.java Sat Aug 6 12:08:54 2011
@@ -0,0 +1,76 @@
+/****************************************************************
+ * 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.james;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.MiniHBaseCluster;
+import org.apache.james.domainlist.hbase.HBaseDomainListTest;
+import org.apache.james.rrt.hbase.HBaseRecipientRewriteTableTest;
+import org.apache.james.system.hbase.TablePool;
+import org.apache.james.system.hbase.TablePoolTest;
+import org.apache.james.user.hbase.HBaseUsersRepositoryTest;
+import org.apache.log4j.Logger;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+@RunWith(Suite.class)
+@SuiteClasses({
+ TablePoolTest.class,
+ HBaseDomainListTest.class,
+ HBaseRecipientRewriteTableTest.class,
+ HBaseUsersRepositoryTest.class
+ })
+public class JamesServerHBaseIntegrationTest {
+
+ private static Logger logger = Logger.getLogger(JamesServerHBaseIntegrationTest.class);
+
+ private static MiniHBaseCluster hbaseCluster;
+
+ @BeforeClass
+ public static void setup() throws Exception {
+ HBaseTestingUtility htu = new HBaseTestingUtility();
+ htu.getConfiguration().setBoolean("dfs.support.append", true);
+ try {
+ hbaseCluster = htu.startMiniCluster();
+ }
+ catch (Exception e) {
+ logger.error("Exception when starting HBase Mini Cluster", e);
+ }
+ TablePool.getInstance(getConfiguration());
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ if (hbaseCluster != null) {
+ hbaseCluster.shutdown();
+ }
+ }
+
+ public static Configuration getConfiguration() {
+ if (hbaseCluster == null) {
+ throw new IllegalStateException("Please instanciate HBaseTestingUtility before invoking this method");
+ }
+ return hbaseCluster.getConfiguration();
+ }
+
+}
Added: james/server/trunk/hbase/src/test/java/org/apache/james/domainlist/hbase/HBaseDomainListTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/src/test/java/org/apache/james/domainlist/hbase/HBaseDomainListTest.java?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/src/test/java/org/apache/james/domainlist/hbase/HBaseDomainListTest.java (added)
+++ james/server/trunk/hbase/src/test/java/org/apache/james/domainlist/hbase/HBaseDomainListTest.java Sat Aug 6 12:08:54 2011
@@ -0,0 +1,37 @@
+/****************************************************************
+ * 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.james.domainlist.hbase;
+
+import org.apache.james.domainlist.api.DomainList;
+import org.apache.james.domainlist.lib.AbstractDomainListTest;
+import org.slf4j.LoggerFactory;
+
+public class HBaseDomainListTest extends AbstractDomainListTest {
+
+ @Override
+ protected DomainList createDomainList() {
+ HBaseDomainList domainList = new HBaseDomainList();
+ domainList.setLog(LoggerFactory.getLogger("MockLog"));
+ domainList.setDNSService(getDNSServer("localhost"));
+ domainList.setAutoDetect(false);
+ domainList.setAutoDetectIP(false);
+ return domainList;
+ }
+
+}
Added: james/server/trunk/hbase/src/test/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTableTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/src/test/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTableTest.java?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/src/test/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTableTest.java (added)
+++ james/server/trunk/hbase/src/test/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTableTest.java Sat Aug 6 12:08:54 2011
@@ -0,0 +1,83 @@
+/****************************************************************
+ * 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.james.rrt.hbase;
+
+import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.james.rrt.api.RecipientRewriteTableException;
+import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
+import org.apache.james.rrt.lib.AbstractRecipientRewriteTableTest;
+import org.slf4j.LoggerFactory;
+
+public class HBaseRecipientRewriteTableTest extends AbstractRecipientRewriteTableTest {
+
+ @Override
+ protected AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception {
+ HBaseRecipientRewriteTable rrt = new HBaseRecipientRewriteTable();
+ rrt.setLog(LoggerFactory.getLogger("MockLog"));
+ rrt.configure(new DefaultConfigurationBuilder());
+ return rrt;
+ }
+
+ /**
+ * @see org.apache.james.rrt.lib.AbstractRecipientRewriteTableTest#addMapping(java.lang.String,
+ * java.lang.String, java.lang.String, int)
+ */
+ protected boolean addMapping(String user, String domain, String mapping, int type) throws RecipientRewriteTableException {
+ try {
+ if (type == ERROR_TYPE) {
+ virtualUserTable.addErrorMapping(user, domain, mapping);
+ } else if (type == REGEX_TYPE) {
+ virtualUserTable.addRegexMapping(user, domain, mapping);
+ } else if (type == ADDRESS_TYPE) {
+ virtualUserTable.addAddressMapping(user, domain, mapping);
+ } else if (type == ALIASDOMAIN_TYPE) {
+ virtualUserTable.addAliasDomainMapping(domain, mapping);
+ } else {
+ return false;
+ }
+ return true;
+ } catch (RecipientRewriteTableException e) {
+ return false;
+ }
+ }
+
+ /**
+ * @see org.apache.james.rrt.lib.AbstractRecipientRewriteTableTest#removeMapping(java.lang.String,
+ * java.lang.String, java.lang.String, int)
+ */
+ protected boolean removeMapping(String user, String domain, String mapping, int type) throws RecipientRewriteTableException {
+ try {
+ if (type == ERROR_TYPE) {
+ virtualUserTable.removeErrorMapping(user, domain, mapping);
+ } else if (type == REGEX_TYPE) {
+ virtualUserTable.removeRegexMapping(user, domain, mapping);
+ } else if (type == ADDRESS_TYPE) {
+ virtualUserTable.removeAddressMapping(user, domain, mapping);
+ } else if (type == ALIASDOMAIN_TYPE) {
+ virtualUserTable.removeAliasDomainMapping(domain, mapping);
+ } else {
+ return false;
+ }
+ return true;
+ } catch (RecipientRewriteTableException e) {
+ return false;
+ }
+ }
+
+}
Added: james/server/trunk/hbase/src/test/java/org/apache/james/system/hbase/TablePoolTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/src/test/java/org/apache/james/system/hbase/TablePoolTest.java?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/src/test/java/org/apache/james/system/hbase/TablePoolTest.java (added)
+++ james/server/trunk/hbase/src/test/java/org/apache/james/system/hbase/TablePoolTest.java Sat Aug 6 12:08:54 2011
@@ -0,0 +1,49 @@
+/****************************************************************
+ * 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.james.system.hbase;
+
+import java.io.IOException;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+public class TablePoolTest {
+
+ @Test
+ public void testGetInstance() throws IOException {
+ Assert.assertNotNull(TablePool.getInstance());
+ }
+
+ @Test
+ public void testGetDomainlistTable() throws IOException {
+ Assert.assertNotNull(TablePool.getInstance().getDomainlistTable());
+ }
+
+ @Test
+ public void testGetRecipientRewriteTable() throws IOException {
+ Assert.assertNotNull(TablePool.getInstance().getRecipientRewriteTable());
+ }
+
+ @Test
+ public void testGetUsersRepositoryTable() throws IOException {
+ Assert.assertNotNull(TablePool.getInstance().getUsersRepositoryTable());
+ }
+
+}
Added: james/server/trunk/hbase/src/test/java/org/apache/james/user/hbase/HBaseUsersRepositoryTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/src/test/java/org/apache/james/user/hbase/HBaseUsersRepositoryTest.java?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/src/test/java/org/apache/james/user/hbase/HBaseUsersRepositoryTest.java (added)
+++ james/server/trunk/hbase/src/test/java/org/apache/james/user/hbase/HBaseUsersRepositoryTest.java Sat Aug 6 12:08:54 2011
@@ -0,0 +1,61 @@
+/****************************************************************
+ * 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.james.user.hbase;
+
+import java.util.Iterator;
+
+import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.james.user.api.UsersRepository;
+import org.apache.james.user.api.UsersRepositoryException;
+import org.apache.james.user.lib.AbstractUsersRepositoryTest;
+import org.junit.After;
+import org.junit.Before;
+import org.slf4j.LoggerFactory;
+
+public class HBaseUsersRepositoryTest extends AbstractUsersRepositoryTest {
+
+ @Override
+ @Before
+ protected void setUp() throws Exception {
+ super.setUp();
+ deleteAll();
+ }
+
+ @Override
+ @After
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ private void deleteAll() throws UsersRepositoryException, Exception {
+ Iterator<String> it = getUsersRepository().list();
+ while (it.hasNext()) {
+ getUsersRepository().removeUser(it.next());
+ }
+ }
+
+ @Override
+ protected UsersRepository getUsersRepository() throws Exception {
+ HBaseUsersRepository userRepository = new HBaseUsersRepository();
+ userRepository.setLog(LoggerFactory.getLogger("MockLog"));
+ userRepository.configure(new DefaultConfigurationBuilder());
+ return userRepository;
+ }
+
+}
Added: james/server/trunk/hbase/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/james/server/trunk/hbase/src/test/resources/log4j.properties?rev=1154497&view=auto
==============================================================================
--- james/server/trunk/hbase/src/test/resources/log4j.properties (added)
+++ james/server/trunk/hbase/src/test/resources/log4j.properties Sat Aug 6 12:08:54 2011
@@ -0,0 +1,6 @@
+log4j.rootLogger=WARN, A1
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+
+# Print the date in ISO 8601 format
+log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org