BookKeeper 4.2.3 release.

git-svn-id: https://svn.apache.org/repos/asf/zookeeper/bookkeeper/tags/release-4.2.3@1601594 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index 17f1688..71e6ea5 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -4,6 +4,12 @@
 
     BUGFIXES:
 
+     BOOKKEEPER-766: Update notice.txt files to include 2014 (ivank via fpj)
+
+     BOOKKEEPER-767: Allow loopback in tests (ivank via fpj)
+
+     BOOKKEEPER-765: bookkeeper script should fall back to java in path if JAVA_HOME is not set (ivank)
+
       bookkeeper-server:
 
         BOOKKEEPER-711: bookkeeper-daemon.sh will not remove the pid file one successful stop (vinay via sijie)
diff --git a/NOTICE b/NOTICE
index 37b20c9..5a6871a 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,5 +1,5 @@
 Apache BookKeeper
-Copyright 2011-2013 The Apache Software Foundation
+Copyright 2011-2014 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/bookkeeper-server/bin/bookkeeper b/bookkeeper-server/bin/bookkeeper
index a48110b..7ce92ea 100755
--- a/bookkeeper-server/bin/bookkeeper
+++ b/bookkeeper-server/bin/bookkeeper
@@ -20,13 +20,6 @@
 # * limitations under the License.
 # */
 
-# Check for the Java
-if [[ -z $JAVA_HOME ]]; then
-   echo "Error: JAVA_HOME is not set" 1>&2
-   exit 1
-fi
-JAVA=$JAVA_HOME/bin/java
-
 # check if net.ipv6.bindv6only is set to 1
 bindv6only=$(/sbin/sysctl -n net.ipv6.bindv6only 2> /dev/null)
 if [ -n "$bindv6only" ] && [ "$bindv6only" -eq "1" ]
@@ -64,6 +57,19 @@
 
 source $BK_HOME/conf/bkenv.sh
 
+# Check for the java to use
+if [[ -z $JAVA_HOME ]]; then
+    JAVA=$(which java)
+    if [ $? = 0 ]; then
+        echo "JAVA_HOME not set, using java from PATH. ($JAVA)"
+    else
+        echo "Error: JAVA_HOME not set, and no java executable found in $PATH." 1>&2
+        exit 1
+    fi
+else
+    JAVA=$JAVA_HOME/bin/java
+fi
+
 # exclude tests jar
 RELEASE_JAR=`ls $BK_HOME/bookkeeper-server-*.jar 2> /dev/null | grep -v tests | tail -1` 
 if [ $? == 0 ]; then
diff --git a/bookkeeper-server/conf/bkenv.sh b/bookkeeper-server/conf/bkenv.sh
index 24d3be0..1fed8dc 100644
--- a/bookkeeper-server/conf/bkenv.sh
+++ b/bookkeeper-server/conf/bkenv.sh
@@ -20,6 +20,9 @@
 # * limitations under the License.
 # */
 
+# Set JAVA_HOME here to override the environment setting
+# JAVA_HOME=
+
 # default settings for starting bookkeeper
 
 # Configuration file of settings used in bookie server
@@ -41,4 +44,4 @@
 #BOOKIE_PID_DIR=
 
 #Wait time before forcefully kill the Bookie server instance, if the stop is not successful
-#BOOKIE_STOP_TIMEOUT=
\ No newline at end of file
+#BOOKIE_STOP_TIMEOUT=
diff --git a/bookkeeper-server/src/main/resources/NOTICE.bin.txt b/bookkeeper-server/src/main/resources/NOTICE.bin.txt
index bc16cbd..7e15b27 100644
--- a/bookkeeper-server/src/main/resources/NOTICE.bin.txt
+++ b/bookkeeper-server/src/main/resources/NOTICE.bin.txt
@@ -1,5 +1,5 @@
 Apache BookKeeper
-Copyright 2011-2013 The Apache Software Foundation
+Copyright 2011-2014 The Apache Software Foundation
 
 Licensed under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
index bdc54cd..d05bf49 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
@@ -97,8 +97,8 @@
         tmpDir.mkdir();
 
         final ServerConfiguration conf = new ServerConfiguration()
-                .setZkServers(null).setJournalDirName(tmpDir.getPath())
-                .setLedgerDirNames(new String[] { tmpDir.getPath() });
+            .setZkServers(null).setJournalDirName(tmpDir.getPath())
+            .setAllowLoopback(true).setLedgerDirNames(new String[] { tmpDir.getPath() });
 
         // simulating ZooKeeper exception by assigning a closed zk client to bk
         BookieServer bkServer = new BookieServer(conf) {
@@ -130,8 +130,8 @@
         tmpDir.mkdir();
 
         final ServerConfiguration conf = new ServerConfiguration()
-                .setZkServers(null).setJournalDirName(tmpDir.getPath())
-                .setLedgerDirNames(new String[] { tmpDir.getPath() });
+            .setZkServers(null).setJournalDirName(tmpDir.getPath())
+            .setAllowLoopback(true).setLedgerDirNames(new String[] { tmpDir.getPath() });
 
         final String bkRegPath = conf.getZkAvailableBookiesPath() + "/"
                 + InetAddress.getLocalHost().getHostAddress() + ":"
@@ -196,8 +196,9 @@
         tmpDir.mkdir();
 
         ServerConfiguration conf = new ServerConfiguration().setZkServers(null)
-                .setJournalDirName(tmpDir.getPath()).setLedgerDirNames(
-                        new String[] { tmpDir.getPath() });
+            .setAllowLoopback(true)
+            .setJournalDirName(tmpDir.getPath())
+            .setLedgerDirNames(new String[] { tmpDir.getPath() });
 
         String bkRegPath = conf.getZkAvailableBookiesPath() + "/"
                 + InetAddress.getLocalHost().getHostAddress() + ":"
@@ -252,9 +253,10 @@
 
         ServerConfiguration conf = new ServerConfiguration();
         int port = 12555;
-        conf.setZkServers(null).setBookiePort(port).setJournalDirName(
-                tmpDir.getPath()).setLedgerDirNames(
-                new String[] { tmpDir.getPath() });
+        conf.setZkServers(null).setBookiePort(port)
+            .setAllowLoopback(true)
+            .setJournalDirName(tmpDir.getPath())
+            .setLedgerDirNames(new String[] { tmpDir.getPath() });
         BookieServer bs1 = new BookieServer(conf);
         bs1.start();
 
@@ -281,9 +283,9 @@
         tmpDir.mkdir();
 
         final ServerConfiguration conf = new ServerConfiguration()
-                .setZkServers(zkutil.getZooKeeperConnectString())
-                .setZkTimeout(5000).setJournalDirName(tmpDir.getPath())
-                .setLedgerDirNames(new String[] { tmpDir.getPath() });
+            .setZkServers(zkutil.getZooKeeperConnectString())
+            .setZkTimeout(5000).setJournalDirName(tmpDir.getPath())
+            .setAllowLoopback(true).setLedgerDirNames(new String[] { tmpDir.getPath() });
         try {
             new Bookie(conf);
             fail("Should throw ConnectionLossException as ZKServer is not running!");
@@ -308,6 +310,7 @@
         final ServerConfiguration conf = new ServerConfiguration()
             .setZkServers(zkutil.getZooKeeperConnectString())
             .setZkTimeout(5000).setJournalDirName(tmpDir.getPath())
+            .setAllowLoopback(true)
             .setLedgerDirNames(new String[] { tmpDir.getPath() });
         conf.setZkLedgersRootPath(ZK_ROOT);
         try {
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieJournalTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieJournalTest.java
index 965b955..71482bc 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieJournalTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieJournalTest.java
@@ -216,6 +216,7 @@
         writeIndexFileForLedger(Bookie.getCurrentDirectory(ledgerDir), 1, "testPasswd".getBytes());
 
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(null)
             .setJournalDirName(journalDir.getPath())
             .setLedgerDirNames(new String[] { ledgerDir.getPath() });
@@ -254,6 +255,7 @@
         writeJunkJournal(Bookie.getCurrentDirectory(journalDir));
 
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(null)
             .setJournalDirName(journalDir.getPath())
             .setLedgerDirNames(new String[] { ledgerDir.getPath() });
@@ -292,6 +294,7 @@
         writePreV2Journal(Bookie.getCurrentDirectory(journalDir), 0);
 
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(null)
             .setJournalDirName(journalDir.getPath())
             .setLedgerDirNames(new String[] { ledgerDir.getPath() });
@@ -318,6 +321,7 @@
         writePostV2Journal(Bookie.getCurrentDirectory(journalDir), 0);
 
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(null)
             .setJournalDirName(journalDir.getPath())
             .setLedgerDirNames(new String[] { ledgerDir.getPath() });
@@ -348,6 +352,7 @@
         writeIndexFileForLedger(ledgerDir, 1, "testPasswd".getBytes());
 
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(null)
             .setJournalDirName(journalDir.getPath())
             .setLedgerDirNames(new String[] { ledgerDir.getPath() });
@@ -392,6 +397,7 @@
                                 1, "testPasswd".getBytes());
 
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(null)
             .setJournalDirName(journalDir.getPath())
             .setLedgerDirNames(new String[] { ledgerDir.getPath() });
@@ -440,6 +446,7 @@
                                 1, "testPasswd".getBytes());
 
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(null)
             .setJournalDirName(journalDir.getPath())
             .setLedgerDirNames(new String[] { ledgerDir.getPath() });
@@ -506,6 +513,7 @@
                                        1, "testPasswd".getBytes(), truncateMasterKey);
 
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(null)
             .setJournalDirName(journalDir.getPath())
             .setLedgerDirNames(new String[] { ledgerDir.getPath() });
@@ -568,6 +576,7 @@
                                        truncateMasterKey);
 
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(null)
             .setJournalDirName(journalDir.getPath())
             .setLedgerDirNames(new String[] { ledgerDir.getPath() });
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CompactionTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CompactionTest.java
index 1bb1c07..e84183c 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CompactionTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CompactionTest.java
@@ -317,7 +317,7 @@
     @Test(timeout=60000)
     public void testCompactionSafety() throws Exception {
         tearDown(); // I dont want the test infrastructure
-        ServerConfiguration conf = new ServerConfiguration();
+        ServerConfiguration conf = new ServerConfiguration().setAllowLoopback(true);
         final Set<Long> ledgers = Collections.newSetFromMap(new ConcurrentHashMap<Long, Boolean>());
         LedgerManager manager = new LedgerManager() {
                 @Override
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CookieTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CookieTest.java
index ea961fe..5cdb576 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CookieTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CookieTest.java
@@ -78,6 +78,7 @@
         ServerConfiguration conf = new ServerConfiguration()
             .setZkServers(zkutil.getZooKeeperConnectString())
             .setJournalDirName(newDirectory(false))
+            .setAllowLoopback(true)
             .setLedgerDirNames(new String[] { newDirectory(false) })
             .setBookiePort(bookiePort);
         try {
@@ -95,6 +96,7 @@
     @Test(timeout=60000)
     public void testBadJournalCookie() throws Exception {
         ServerConfiguration conf1 = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setJournalDirName(newDirectory())
             .setLedgerDirNames(new String[] { newDirectory() })
             .setBookiePort(bookiePort);
@@ -104,6 +106,7 @@
         String journalDir = newDirectory();
         String ledgerDir = newDirectory();
         ServerConfiguration conf2 = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(zkutil.getZooKeeperConnectString())
             .setJournalDirName(journalDir)
             .setLedgerDirNames(new String[] { ledgerDir })
@@ -131,6 +134,7 @@
             newDirectory(), newDirectory(), newDirectory() };
         String journalDir = newDirectory();
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(zkutil.getZooKeeperConnectString())
             .setJournalDirName(journalDir)
             .setLedgerDirNames(ledgerDirs)
@@ -172,6 +176,7 @@
         String ledgerDir0 = newDirectory();
         String journalDir = newDirectory();
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(zkutil.getZooKeeperConnectString())
             .setJournalDirName(journalDir)
             .setLedgerDirNames(new String[] { ledgerDir0 })
@@ -204,6 +209,7 @@
         String ledgerDir0 = newDirectory();
         String journalDir = newDirectory();
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(zkutil.getZooKeeperConnectString())
             .setJournalDirName(journalDir)
             .setLedgerDirNames(new String[] { ledgerDir0 , newDirectory() })
@@ -229,6 +235,7 @@
     @Test(timeout=60000)
     public void testBookiePortChanged() throws Exception {
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(zkutil.getZooKeeperConnectString())
             .setJournalDirName(newDirectory())
             .setLedgerDirNames(new String[] { newDirectory() , newDirectory() })
@@ -255,6 +262,7 @@
     @Test(timeout=60000)
     public void testNewBookieStartingWithAnotherBookiesPort() throws Exception {
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(zkutil.getZooKeeperConnectString())
             .setJournalDirName(newDirectory())
             .setLedgerDirNames(new String[] { newDirectory() , newDirectory() })
@@ -264,6 +272,7 @@
         b.shutdown();
 
         conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(zkutil.getZooKeeperConnectString())
             .setJournalDirName(newDirectory())
             .setLedgerDirNames(new String[] { newDirectory() , newDirectory() })
@@ -289,10 +298,11 @@
         BookKeeperAdmin.format(adminConf, false, true);
 
         ServerConfiguration bookieConf = new ServerConfiguration()
-                .setZkServers(zkutil.getZooKeeperConnectString())
-                .setJournalDirName(newDirectory(false))
-                .setLedgerDirNames(new String[] { newDirectory(false) })
-                .setBookiePort(bookiePort);
+            .setAllowLoopback(true)
+            .setZkServers(zkutil.getZooKeeperConnectString())
+            .setJournalDirName(newDirectory(false))
+            .setLedgerDirNames(new String[] { newDirectory(false) })
+            .setBookiePort(bookiePort);
         // Bookie should start successfully for fresh env.
         new Bookie(bookieConf);
 
@@ -320,6 +330,7 @@
     @Test(timeout=60000)
     public void testV2data() throws Exception {
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(zkutil.getZooKeeperConnectString())
             .setJournalDirName(newV2JournalDirectory())
             .setLedgerDirNames(new String[] { newV2LedgerDirectory() })
@@ -340,6 +351,7 @@
     @Test(timeout=60000)
     public void testV1data() throws Exception {
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(zkutil.getZooKeeperConnectString())
             .setJournalDirName(newV1JournalDirectory())
             .setLedgerDirNames(new String[] { newV1LedgerDirectory() })
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CreateNewLogTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CreateNewLogTest.java
index 6ec48e5..33686f1 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CreateNewLogTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CreateNewLogTest.java
@@ -82,6 +82,7 @@
         // Creating a new configuration with a number of 
         // ledger directories.
         conf.setLedgerDirNames(ledgerDirs);
+        conf.setAllowLoopback(true);
         LedgerDirsManager ledgerDirsManager = new LedgerDirsManager(conf);
         EntryLogger el = new EntryLogger(conf, ledgerDirsManager);
         
@@ -99,4 +100,4 @@
         Assert.assertTrue("Wrong log id", el.getCurrentLogId() > 1);
     }
 
-}
\ No newline at end of file
+}
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/EntryLogTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/EntryLogTest.java
index 5d9eeb5..35f57a6 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/EntryLogTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/EntryLogTest.java
@@ -56,6 +56,7 @@
 
         int gcWaitTime = 1000;
         ServerConfiguration conf = new ServerConfiguration();
+        conf.setAllowLoopback(true);
         conf.setGcWaitTime(gcWaitTime);
         conf.setLedgerDirNames(new String[] {tmpDir.toString()});
         Bookie bookie = new Bookie(conf);
@@ -107,6 +108,7 @@
         Bookie.checkDirectoryStructure(curDir);
 
         ServerConfiguration conf = new ServerConfiguration();
+        conf.setAllowLoopback(true);
         conf.setLedgerDirNames(new String[] {tmpDir.toString()});
         Bookie bookie = new Bookie(conf);
         // create some entries
@@ -168,6 +170,7 @@
         File tmpDir = File.createTempFile("bkTest", ".dir");
         tmpDir.delete();
         ServerConfiguration conf = new ServerConfiguration();
+        conf.setAllowLoopback(true);
         conf.setLedgerDirNames(new String[] { tmpDir.toString() });
         EntryLogger entryLogger = null;
         try {
@@ -193,6 +196,7 @@
         File ledgerDir2 = File.createTempFile("bkTest", ".dir");
         ledgerDir2.delete();
         ServerConfiguration conf = new ServerConfiguration();
+        conf.setAllowLoopback(true);
         conf.setLedgerDirNames(new String[] { ledgerDir1.getAbsolutePath(),
                 ledgerDir2.getAbsolutePath() });
         Bookie bookie = new Bookie(conf);
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/LedgerCacheTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/LedgerCacheTest.java
index 7160181..0ed1af7 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/LedgerCacheTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/LedgerCacheTest.java
@@ -73,6 +73,7 @@
 
         conf = new ServerConfiguration();
         conf.setZkServers(null);
+        conf.setAllowLoopback(true);
         conf.setJournalDirName(txnDir.getPath());
         conf.setLedgerDirNames(new String[] { ledgerDir.getPath() });
         bookie = new Bookie(conf);
@@ -214,6 +215,8 @@
         conf.setLedgerDirNames(new String[] { ledgerDir1.getAbsolutePath(),
                 ledgerDir2.getAbsolutePath() });
         conf.setOpenFileLimit(1);
+        conf.setAllowLoopback(true);
+
         Bookie bookie = new Bookie(conf);
         InterleavedLedgerStorage ledgerStorage = ((InterleavedLedgerStorage) bookie.ledgerStorage);
         final LedgerCacheImpl ledgerCache = (LedgerCacheImpl) ledgerStorage.ledgerCache;
@@ -306,7 +309,7 @@
         ledgerDir1.delete();
         File ledgerDir2 = File.createTempFile("bkTest", ".dir");
         ledgerDir2.delete();
-        ServerConfiguration conf = new ServerConfiguration();
+        ServerConfiguration conf = new ServerConfiguration().setAllowLoopback(true);
         conf.setLedgerDirNames(new String[] { ledgerDir1.getAbsolutePath(), ledgerDir2.getAbsolutePath() });
 
         Bookie bookie = new Bookie(conf);
@@ -364,6 +367,7 @@
 
         ServerConfiguration conf = new ServerConfiguration()
             .setZkServers(null)
+            .setAllowLoopback(true)
             .setJournalDirName(journalDir.getPath())
             .setLedgerDirNames(new String[] { ledgerDir.getPath() })
             .setFlushInterval(1000)
@@ -377,6 +381,7 @@
         }
 
         conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(null)
             .setJournalDirName(journalDir.getPath())
             .setLedgerDirNames(new String[] { ledgerDir.getPath() });
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/TestLedgerDirsManager.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/TestLedgerDirsManager.java
index 294295f..d4327c2 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/TestLedgerDirsManager.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/TestLedgerDirsManager.java
@@ -35,7 +35,7 @@
 public class TestLedgerDirsManager extends TestCase {
     static Logger LOG = LoggerFactory.getLogger(TestLedgerDirsManager.class);
 
-    ServerConfiguration conf = new ServerConfiguration();
+    ServerConfiguration conf;
     File curDir;
     LedgerDirsManager dirsManager;
 
@@ -48,6 +48,7 @@
         Bookie.checkDirectoryStructure(curDir);
 
         ServerConfiguration conf = new ServerConfiguration();
+        conf.setAllowLoopback(true);
         conf.setLedgerDirNames(new String[] {tmpDir.toString()});
 
         dirsManager = new LedgerDirsManager(conf);
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/UpgradeTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/UpgradeTest.java
index 6825e8f..f58d5ea 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/UpgradeTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/UpgradeTest.java
@@ -165,6 +165,7 @@
 
     private static void testUpgradeProceedure(String zkServers, String journalDir, String ledgerDir) throws Exception {
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(zkServers)
             .setJournalDirName(journalDir)
             .setLedgerDirNames(new String[] { ledgerDir })
@@ -222,6 +223,7 @@
         testUpgradeProceedure(zkutil.getZooKeeperConnectString(), journalDir, ledgerDir);
         // Upgrade again
         ServerConfiguration conf = new ServerConfiguration()
+            .setAllowLoopback(true)
             .setZkServers(zkutil.getZooKeeperConnectString())
             .setJournalDirName(journalDir)
             .setLedgerDirNames(new String[] { ledgerDir })
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestLedgerUnderreplicationManager.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestLedgerUnderreplicationManager.java
index df552ad..62548c6 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestLedgerUnderreplicationManager.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestLedgerUnderreplicationManager.java
@@ -92,7 +92,9 @@
         zkUtil = new ZooKeeperUtil();
         zkUtil.startServer();
 
-        conf = new ServerConfiguration().setZkServers(zkUtil.getZooKeeperConnectString());
+        conf = new ServerConfiguration()
+            .setAllowLoopback(true)
+            .setZkServers(zkUtil.getZooKeeperConnectString());
 
         executor = Executors.newCachedThreadPool();
 
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieClientTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieClientTest.java
index 34c14ab..670d42c 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieClientTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieClientTest.java
@@ -53,7 +53,7 @@
     public int port = 13645;
     public ClientSocketChannelFactory channelFactory;
     public OrderedSafeExecutor executor;
-    ServerConfiguration conf = new ServerConfiguration();
+    ServerConfiguration conf;
 
     @Override
     public void setUp() throws Exception {
@@ -67,6 +67,7 @@
         ServerConfiguration conf = new ServerConfiguration();
         conf.setZkServers(null).setBookiePort(port)
             .setJournalDirName(tmpDir.getPath())
+            .setAllowLoopback(true)
             .setLedgerDirNames(new String[] { tmpDir.getPath() });
         bs = new BookieServer(conf);
         bs.start();
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieJournalRollingTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieJournalRollingTest.java
index 5e0a92c..54a85bc 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieJournalRollingTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieJournalRollingTest.java
@@ -201,6 +201,7 @@
 
         // set flush interval to a large value
         ServerConfiguration newConf = new ServerConfiguration();
+        newConf.setAllowLoopback(true);
         newConf.setFlushInterval(999999999);
         // restart bookies
         restartBookies(newConf);
@@ -239,6 +240,7 @@
         // restart bookies with flush interval set to a large value
         ServerConfiguration newConf = new ServerConfiguration();
         newConf.setFlushInterval(999999999);
+        newConf.setAllowLoopback(true);
         // restart bookies
         restartBookies(newConf);
 
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/ConcurrentLedgerTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/ConcurrentLedgerTest.java
index 1ddabe7..7db8e76 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/ConcurrentLedgerTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/ConcurrentLedgerTest.java
@@ -50,7 +50,7 @@
     File txnDir, ledgerDir;
     int recvTimeout = 10000;
     Semaphore throttle;
-    ServerConfiguration conf = new ServerConfiguration();
+    ServerConfiguration conf;
 
     @Override
     @Before
@@ -71,6 +71,8 @@
         ledgerDir = new File(tmpFile.getParent(), tmpFile.getName()+".dir");
         ledgerDir.mkdirs();
 
+        conf = new ServerConfiguration();
+        conf.setAllowLoopback(true);
         conf.setBookiePort(5000);
         conf.setZkServers(null);
         conf.setJournalDirName(txnDir.getPath());
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/NIOServerFactoryTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/NIOServerFactoryTest.java
index b68d055..dc2240f 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/NIOServerFactoryTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/NIOServerFactoryTest.java
@@ -47,6 +47,7 @@
     @Test(timeout=60000)
     public void testProblemProcessor() throws Exception {
         ServerConfiguration conf = new ServerConfiguration();
+        conf.setAllowLoopback(true);
         int port = PortManager.nextFreePort();
         conf.setBookiePort(port);
         NIOServerFactory factory = new NIOServerFactory(conf, problemProcessor);
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/TestBackwardCompat.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/TestBackwardCompat.java
index 0a5274e..18a4265 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/TestBackwardCompat.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/TestBackwardCompat.java
@@ -267,6 +267,7 @@
         ServerCurrent(File journalDir, File ledgerDir, int port) throws Exception {
             conf = new org.apache.bookkeeper.conf.ServerConfiguration();
             conf.setBookiePort(port);
+            conf.setAllowLoopback(true);
             conf.setZkServers(zkUtil.getZooKeeperConnectString());
             conf.setJournalDirName(journalDir.getPath());
             conf.setLedgerDirNames(new String[] { ledgerDir.getPath() });
@@ -614,4 +615,4 @@
 
         scur.stop();
     }
-}
\ No newline at end of file
+}
diff --git a/hedwig-server/bin/hedwig b/hedwig-server/bin/hedwig
index d1a62f4..bdbbfba 100755
--- a/hedwig-server/bin/hedwig
+++ b/hedwig-server/bin/hedwig
@@ -58,6 +58,19 @@
 
 . $HW_HOME/conf/hwenv.sh
 
+# Check for the java to use
+if [[ -z $JAVA_HOME ]]; then
+    JAVA=$(which java)
+    if [ $? = 0 ]; then
+        echo "JAVA_HOME not set, using java from PATH. ($JAVA)"
+    else
+        echo "Error: JAVA_HOME not set, and no java executable found in $PATH." 1>&2
+        exit 1
+    fi
+else
+    JAVA=$JAVA_HOME/bin/java
+fi
+
 RELEASE_JAR=`ls $HW_HOME/hedwig-server-*.jar 2> /dev/null | tail -1`
 if [ $? == 0 ]; then
     HEDWIG_JAR=$RELEASE_JAR
@@ -171,7 +184,7 @@
 # Change to HW_HOME to support relative paths
 cd "$BK_HOME"
 if [ $COMMAND == "server" ]; then
-    exec java $OPTS $JMX_ARGS org.apache.hedwig.server.netty.PubSubServer $HEDWIG_SERVER_CONF $HEDWIG_REGION_CLIENT_CONF $@
+    exec $JAVA $OPTS $JMX_ARGS org.apache.hedwig.server.netty.PubSubServer $HEDWIG_SERVER_CONF $HEDWIG_REGION_CLIENT_CONF $@
 elif [ $COMMAND == "console" ]; then
     # hedwig console configuration server part
     if [ -z "$HEDWIG_CONSOLE_SERVER_CONF" ]; then
@@ -181,11 +194,11 @@
     if [ -n "$HEDWIG_CONSOLE_CLIENT_CONF" ]; then
         HEDWIG_CONSOLE_CLIENT_OPTIONS="-client-cfg $HEDWIG_CONSOLE_CLIENT_CONF"
     fi
-    exec java $OPTS org.apache.hedwig.admin.console.HedwigConsole -server-cfg $HEDWIG_CONSOLE_SERVER_CONF $HEDWIG_CONSOLE_CLIENT_OPTIONS $@
+    exec $JAVA $OPTS org.apache.hedwig.admin.console.HedwigConsole -server-cfg $HEDWIG_CONSOLE_SERVER_CONF $HEDWIG_CONSOLE_CLIENT_OPTIONS $@
 elif [ $COMMAND == "help" ]; then
     hedwig_help;
 else
-    exec java $OPTS $COMMAND $@
+    exec $JAVA $OPTS $COMMAND $@
 fi
 
 
diff --git a/hedwig-server/conf/hwenv.sh b/hedwig-server/conf/hwenv.sh
index 5701090..8d379b6 100644
--- a/hedwig-server/conf/hwenv.sh
+++ b/hedwig-server/conf/hwenv.sh
@@ -20,6 +20,9 @@
 # * limitations under the License.
 # */
 
+# Set JAVA_HOME here to override the environment setting
+# JAVA_HOME=
+
 # default settings for starting hedwig
 # HEDWIG_SERVER_CONF=
 
diff --git a/hedwig-server/src/main/resources/NOTICE.bin.txt b/hedwig-server/src/main/resources/NOTICE.bin.txt
index 9e77b73..28d670d 100644
--- a/hedwig-server/src/main/resources/NOTICE.bin.txt
+++ b/hedwig-server/src/main/resources/NOTICE.bin.txt
@@ -1,5 +1,5 @@
 Apache BookKeeper
-Copyright 2011-2013 The Apache Software Foundation
+Copyright 2011-2014 The Apache Software Foundation
 
 Licensed under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
diff --git a/hedwig-server/src/test/java/org/apache/hedwig/server/TestBackwardCompat.java b/hedwig-server/src/test/java/org/apache/hedwig/server/TestBackwardCompat.java
index e54c5f8..fc1ed9e 100644
--- a/hedwig-server/src/test/java/org/apache/hedwig/server/TestBackwardCompat.java
+++ b/hedwig-server/src/test/java/org/apache/hedwig/server/TestBackwardCompat.java
@@ -502,6 +502,7 @@
                 getClass().getName() + port, "test");
             org.apache.bookkeeper.conf.ServerConfiguration conf = newServerConfiguration(
                 port, zkUtil.getZooKeeperConnectString(), tmpDir, new File[] { tmpDir });
+            conf.setAllowLoopback(true);
             bks.add(startBookie(conf));
             bkConfs.add(conf);
         }
@@ -510,6 +511,7 @@
             int port, String zkServers, File journalDir, File[] ledgerDirs) {
             org.apache.bookkeeper.conf.ServerConfiguration conf =
                 new org.apache.bookkeeper.conf.ServerConfiguration();
+            conf.setAllowLoopback(true);
             conf.setBookiePort(port);
             conf.setZkServers(zkServers);
             conf.setJournalDirName(journalDir.getPath());
diff --git a/hedwig-server/src/test/java/org/apache/hedwig/server/persistence/BookKeeperTestBase.java b/hedwig-server/src/test/java/org/apache/hedwig/server/persistence/BookKeeperTestBase.java
index 11487c8..7ba0174 100644
--- a/hedwig-server/src/test/java/org/apache/hedwig/server/persistence/BookKeeperTestBase.java
+++ b/hedwig-server/src/test/java/org/apache/hedwig/server/persistence/BookKeeperTestBase.java
@@ -244,6 +244,7 @@
 
     protected ServerConfiguration newServerConfiguration(int port, String zkServers, File journalDir, File[] ledgerDirs) {
         ServerConfiguration conf = new ServerConfiguration(baseConf);
+        conf.setAllowLoopback(true);
         conf.setBookiePort(port);
         conf.setZkServers(zkServers);
         conf.setJournalDirName(journalDir.getPath());