Running Oracle NoSQL on Mac OS X
Only Linux and Solaris 10 are officially supported platforms for Oracle NoSQL Database.
My system is Mac OS X 10.8.4 and I was curious to see if Oracle NoSQL would work on my system. At first, when I executed kvstore.jar some exceptions were thrown, as follows:
[ag@mbp:~/kv-2.0.39]$ java -jar lib/kvstore.jar kvlite KVLite: exception in start: java.lang.IllegalStateException: Problem creating log file for logger sn1 at oracle.kv.impl.util.server.LoggerUtils.addFileHandler(LoggerUtils.java:688) at oracle.kv.impl.util.server.LoggerUtils.addLogFileHandler(LoggerUtils.java:623) at oracle.kv.impl.util.server.LoggerUtils.getLogger(LoggerUtils.java:467) at oracle.kv.impl.util.server.LoggerUtils.getLogger(LoggerUtils.java:276) at oracle.kv.impl.sna.MonitorAgentImpl.(MonitorAgentImpl.java:78) at oracle.kv.impl.sna.StorageNodeAgent.setupMonitoring(StorageNodeAgent.java:1470) at oracle.kv.impl.sna.StorageNodeAgent.startupRegistered(StorageNodeAgent.java:491) at oracle.kv.impl.sna.StorageNodeAgent.start(StorageNodeAgent.java:378) at oracle.kv.impl.sna.StorageNodeAgentImpl.start(StorageNodeAgentImpl.java:134) at oracle.kv.util.kvlite.KVLite.startSNA(KVLite.java:293) at oracle.kv.util.kvlite.KVLite.start(KVLite.java:463) at oracle.kv.util.kvlite.KVLite.start(KVLite.java:452) at oracle.kv.util.kvlite.KVLite.main(KVLite.java:557) at oracle.kv.impl.util.KVStoreMain$1.run(KVStoreMain.java:172) at oracle.kv.impl.util.KVStoreMain.main(KVStoreMain.java:393) Caused by: java.io.FileNotFoundException: ./kvroot/kvstore/log/sn1_0.log (Permission denied) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.(FileOutputStream.java:212) at java.io.FileOutputStream.(FileOutputStream.java:136) at java.util.logging.FileHandler.open(FileHandler.java:173) at java.util.logging.FileHandler.openFiles(FileHandler.java:441) at java.util.logging.FileHandler.(FileHandler.java:363) at oracle.kv.util.FileHandler.(FileHandler.java:65) at oracle.kv.impl.util.server.LoggerUtils.addFileHandler(LoggerUtils.java:678) ... 14 more
Based on the "permission denied" error, it is apparent that there is a permission issue. Sudo will provide a quick solution for this problem. Chown is a better solution.
[ag@mbp:~/kv-2.0.39]$ sudo chown -R ag kvroot
However, even after solving this issue, some other exceptions were thrown this time:
[ag@mbp:~/kv-2.0.39]$ java -jar lib/kvstore.jar kvlite Password: Exception in thread "UNKNOWN rg1-rn1(-1)" java.lang.ExceptionInInitializerError at com.sleepycat.je.rep.elections.Elections.(Elections.java:193) at com.sleepycat.je.rep.impl.node.RepNode.startup(RepNode.java:712) at com.sleepycat.je.rep.impl.node.RepNode.joinGroup(RepNode.java:1664) at com.sleepycat.je.rep.impl.RepImpl.joinGroup(RepImpl.java:499) at com.sleepycat.je.rep.ReplicatedEnvironment.joinGroup(ReplicatedEnvironment.java:415) at com.sleepycat.je.rep.ReplicatedEnvironment.(ReplicatedEnvironment.java:468) at com.sleepycat.je.rep.ReplicatedEnvironment.(ReplicatedEnvironment.java:333) at oracle.kv.impl.rep.RepEnvHandleManager.openEnv(RepEnvHandleManager.java:476) at oracle.kv.impl.rep.RepEnvHandleManager.renewRepEnv(RepEnvHandleManager.java:390) at oracle.kv.impl.rep.RepNode.startup(RepNode.java:683) at oracle.kv.impl.rep.RepNodeService.start(RepNodeService.java:341) at oracle.kv.impl.rep.RepNodeService.start(RepNodeService.java:299) at oracle.kv.impl.sna.ManagedRepNode$1.execute(ManagedRepNode.java:202) at oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:153) at oracle.kv.impl.sna.ManagedRepNode.start(ManagedRepNode.java:197) at oracle.kv.impl.sna.ManagedService.main(ManagedService.java:557) at oracle.kv.impl.sna.ThreadServiceManager.run(ThreadServiceManager.java:57) at java.lang.Thread.run(Thread.java:722) Caused by: com.sleepycat.je.EnvironmentFailureException: (JE 5.0.74) java.net.UnknownHostException: mbp: mbp: nodename nor servname provided, or not known UNEXPECTED_EXCEPTION: Unexpected internal Exception, may have side effects. at com.sleepycat.je.EnvironmentFailureException.unexpectedException(EnvironmentFailureException.java:286) at com.sleepycat.je.rep.elections.TimebasedProposalGenerator.(TimebasedProposalGenerator.java:119) ... 18 more Caused by: java.net.UnknownHostException: mbp: mbp: nodename nor servname provided, or not known at java.net.InetAddress.getLocalHost(InetAddress.java:1438) at com.sleepycat.je.rep.elections.TimebasedProposalGenerator.(TimebasedProposalGenerator.java:72) ... 18 more Caused by: java.net.UnknownHostException: mbp: nodename nor servname provided, or not known at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:866) at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1258) at java.net.InetAddress.getLocalHost(InetAddress.java:1434) ... 19 more Process exiting due to fault java.lang.ExceptionInInitializerError at com.sleepycat.je.rep.elections.Elections.(Elections.java:193) at com.sleepycat.je.rep.impl.node.RepNode.startup(RepNode.java:712) at com.sleepycat.je.rep.impl.node.RepNode.joinGroup(RepNode.java:1664) at com.sleepycat.je.rep.impl.RepImpl.joinGroup(RepImpl.java:499) at com.sleepycat.je.rep.ReplicatedEnvironment.joinGroup(ReplicatedEnvironment.java:415) at com.sleepycat.je.rep.ReplicatedEnvironment.(ReplicatedEnvironment.java:468) at com.sleepycat.je.rep.ReplicatedEnvironment.(ReplicatedEnvironment.java:333) at oracle.kv.impl.rep.RepEnvHandleManager.openEnv(RepEnvHandleManager.java:476) at oracle.kv.impl.rep.RepEnvHandleManager.renewRepEnv(RepEnvHandleManager.java:390) at oracle.kv.impl.rep.RepNode.startup(RepNode.java:683) at oracle.kv.impl.rep.RepNodeService.start(RepNodeService.java:341) at oracle.kv.impl.rep.RepNodeService.start(RepNodeService.java:299) at oracle.kv.impl.sna.ManagedRepNode$1.execute(ManagedRepNode.java:202) at oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:153) at oracle.kv.impl.sna.ManagedRepNode.start(ManagedRepNode.java:197) at oracle.kv.impl.sna.ManagedService.main(ManagedService.java:557) at oracle.kv.impl.sna.ThreadServiceManager.run(ThreadServiceManager.java:57) at java.lang.Thread.run(Thread.java:722) Caused by: com.sleepycat.je.EnvironmentFailureException: (JE 5.0.74) java.net.UnknownHostException: mbp: mbp: nodename nor servname provided, or not known UNEXPECTED_EXCEPTION: Unexpected internal Exception, may have side effects. at com.sleepycat.je.EnvironmentFailureException.unexpectedException(EnvironmentFailureException.java:286) at com.sleepycat.je.rep.elections.TimebasedProposalGenerator.(TimebasedProposalGenerator.java:119) ... 18 more Caused by: java.net.UnknownHostException: mbp: mbp: nodename nor servname provided, or not known at java.net.InetAddress.getLocalHost(InetAddress.java:1438) at com.sleepycat.je.rep.elections.TimebasedProposalGenerator.(TimebasedProposalGenerator.java:72) ... 18 more Caused by: java.net.UnknownHostException: mbp: nodename nor servname provided, or not known at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:866) at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1258) at java.net.InetAddress.getLocalHost(InetAddress.java:1434) ... 19 more
We see in the stack trace:
java.net.UnknownHostException: mbp: nodename nor servname provided, or not known
For some reason it couldn't connect to my localhost, called mbp (in my environment). Solution: I executed "sudo vim /etc/hosts" and added the hostname mbp to resolve to 127.0.0.1.
Finally:
[ag@mbp:~/kv-2.0.39]$ sudo java -jar lib/kvstore.jar kvlite Opened existing kvlite store with config: -root ./kvroot -store kvstore -host localhost -port 5000 -admin 5001
So, this is how I managed to run the Oracle NoSQL database on Mac OS X. I should point out however, that even though it is possible to execute the Oracle NoSQL on Mac OS X, Oracle still will not provide support for it, as it is stated in the Admin guide.