Oracle NoSQL – Can’t Start Oracle NoSQL kvstore kvlite

installationnosqloracle

The command java -jar lib/kvstore.jar kvlite fails with the following exception:

févr. 05, 2017 10:40:44 AM java.io.ObjectInputStream filterCheck
INFOS: ObjectInputFilter REJECTED: class java.lang.Enum, array length: -1, nRefs: 14, depth: 4, bytes: 770, ex: n/a
KVLite: exception in start: java.rmi.RemoteException: Can't rebind snaService at Breizh-Atao:5000 csf: <SSLClientSocketFactory name=$|sna|main id=1440135820 connectMs=0 readMs=0 kvStoreName=null clientUse=USER> ssf: <SSLServerSocketFactory backlog=1024 port range=0,0 ssl control = oracle.kv.impl.security.ssl.SSLControl@fabaf7f>; nested exception is: 
    java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.io.InvalidClassException: filter status: REJECTED
    at oracle.kv.impl.util.registry.RegistryUtils.rebind(RegistryUtils.java:853)
    at oracle.kv.impl.sna.StorageNodeAgent.bindUnregisteredSNA(StorageNodeAgent.java:974)
    at oracle.kv.impl.sna.StorageNodeAgent.startupUnregistered(StorageNodeAgent.java:793)
    at oracle.kv.impl.sna.StorageNodeAgent.start(StorageNodeAgent.java:624)
    at oracle.kv.impl.sna.StorageNodeAgentImpl.start(StorageNodeAgentImpl.java:133)
    at oracle.kv.util.kvlite.KVLite.startSNA(KVLite.java:298)
    at oracle.kv.util.kvlite.KVLite.start(KVLite.java:524)
    at oracle.kv.util.kvlite.KVLite.start(KVLite.java:513)
    at oracle.kv.util.kvlite.KVLite.main(KVLite.java:647)
    at oracle.kv.impl.util.KVStoreMain$1.run(KVStoreMain.java:190)
    at oracle.kv.impl.util.KVStoreMain.main(KVStoreMain.java:477)
Caused by: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.io.InvalidClassException: filter status: REJECTED
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:460)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:276)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:253)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:379)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    at oracle.kv.impl.util.registry.RegistryUtils$ExceptionWrappingRegistry.rebind(RegistryUtils.java:1339)
    at oracle.kv.impl.util.registry.RegistryUtils.exportAndRebind(RegistryUtils.java:1184)
    at oracle.kv.impl.util.registry.RegistryUtils.rebind(RegistryUtils.java:849)
    ... 10 more
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.io.InvalidClassException: filter status: REJECTED
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:450)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.InvalidClassException: filter status: REJECTED
    at java.io.ObjectInputStream.filterCheck(ObjectInputStream.java:1244)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1832)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1713)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1829)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1713)
    at java.io.ObjectInputStream.readEnum(ObjectInputStream.java:1938)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1532)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2231)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2155)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2013)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
    at sun.rmi.transport.tcp.TCPEndpoint.read(TCPEndpoint.java:555)
    at sun.rmi.transport.LiveRef.read(LiveRef.java:292)
    at sun.rmi.server.UnicastRef2.readExternal(UnicastRef2.java:78)
    at java.rmi.server.RemoteObject.readObject(RemoteObject.java:455)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1058)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2122)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2013)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2231)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2155)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2013)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
    ... 15 more

The current directory is the root of the installation of kv-4.3.10.

Kernel: 4.4.0-57-generic x86_64 (64 bit)
Desktop: Cinnamon 3.2.7
Distro: Linux Mint 18.1 Serena

java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

Best Answer

These java execeptions are generated due to the addition of new java feature called RMI Better Constraint Checking. Details are given here.

Go to $JAVA_HOME/jre/lib/security directory and edit java.security file.

Excerpt of java.security file.

#
# RMI Registry Serial Filter
#
# The filter pattern uses the same format as jdk.serialFilter.
# This filter can override the builtin filter if additional types need to be
# allowed or rejected from the RMI Registry.
#
#sun.rmi.registry.registryFilter=pattern;pattern

Edit the last line as-

sun.rmi.registry.registryFilter=oracle.kv.**;java.lang.Enum.