Hello,
I tried to execute a locally defined function over apache-geode-1.1.1 cluster
but getting ClassNotFoundException
public class Test {
public static void main(String[] args) throws Throwable {
...
final Function function = new Function() {
@Override
public void execute(FunctionContext functionContext) {
System.out.println("XXX");
}
@Override
public String getId() {
return "XXX";
}
};
...
FunctionService.onRegion(...).execute(function);
....
}
}
Stacktrace:
Exception in thread "main" org.apache.geode.cache.execute.FunctionException:
org.apache.geode.cache.client.ServerOperationException: remote server on
x(GemfireClient:553544:loner):62881:6206bf0b:GemfireClient: While performing a
remote executeRegionFunctionSingleHop
at
org.apache.geode.internal.cache.execute.ServerRegionFunctionExecutor.executeOnServer(ServerRegionFunctionExecutor.java:233)
at
org.apache.geode.internal.cache.execute.ServerRegionFunctionExecutor.executeFunction(ServerRegionFunctionExecutor.java:167)
at
org.apache.geode.internal.cache.execute.AbstractExecution.execute(AbstractExecution.java:420)
at Test.main(Test.java:40)
Caused by: org.apache.geode.cache.client.ServerOperationException: remote
server on x(GemfireClient:553544:loner):62881:6206bf0b:GemfireClient: While
performing a remote executeRegionFunctionSingleHop
at
org.apache.geode.cache.client.internal.ExecuteRegionFunctionSingleHopOp$ExecuteRegionFunctionSingleHopOpImpl.processResponse(ExecuteRegionFunctionSingleHopOp.java:439)
at
org.apache.geode.cache.client.internal.AbstractOp.processResponse(AbstractOp.java:225)
at
org.apache.geode.cache.client.internal.AbstractOp.attemptReadResponse(AbstractOp.java:164)
at
org.apache.geode.cache.client.internal.AbstractOp.attempt(AbstractOp.java:388)
at
org.apache.geode.cache.client.internal.ConnectionImpl.execute(ConnectionImpl.java:267)
at
org.apache.geode.cache.client.internal.pooling.PooledConnection.execute(PooledConnection.java:328)
at
org.apache.geode.cache.client.internal.OpExecutorImpl.executeWithPossibleReAuthentication(OpExecutorImpl.java:937)
at
org.apache.geode.cache.client.internal.OpExecutorImpl.executeOnServer(OpExecutorImpl.java:369)
at
org.apache.geode.cache.client.internal.OpExecutorImpl.executeOn(OpExecutorImpl.java:333)
at
org.apache.geode.cache.client.internal.PoolImpl.executeOn(PoolImpl.java:733)
at
org.apache.geode.cache.client.internal.SingleHopOperationCallable.call(SingleHopOperationCallable.java:55)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: Test$1
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:628)
at
org.apache.geode.internal.InternalDataSerializer$DSObjectInputStream.resolveClass(InternalDataSerializer.java:3605)
at
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1620)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1781)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at
org.apache.geode.internal.VersionedObjectInput.readObject(VersionedObjectInput.java:176)
at
org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2992)
at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2897)
at
org.apache.geode.internal.util.BlobHelper.deserializeBlob(BlobHelper.java:99)
at
org.apache.geode.internal.cache.tier.sockets.CacheServerHelper.deserialize(CacheServerHelper.java:76)
at
org.apache.geode.internal.cache.tier.sockets.Part.getObject(Part.java:268)
at
org.apache.geode.internal.cache.tier.sockets.Part.getObject(Part.java:276)
at
org.apache.geode.internal.cache.tier.sockets.Part.getStringOrObject(Part.java:281)
at
org.apache.geode.internal.cache.tier.sockets.command.ExecuteRegionFunctionSingleHop.cmdExecute(ExecuteRegionFunctionSingleHop.java:98)
at
org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:141)
at
org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:783)
at
org.apache.geode.internal.cache.tier.sockets.ServerConnection.doOneMessage(ServerConnection.java:914)
at
org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1171)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at
org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$1$1.run(AcceptorImpl.java:519)
at java.lang.Thread.run(Thread.java:745)
As per documentation I should not deploy jar with defined functions via gfsh to
run programmatically defined functions.
Please advice what I miss that leads to such exception.