The Function implementation needs to be resolvable on the server classpath. This can be done using `gfsh deploy …` or explicitly setting the classpath when starting the server.
Anthony > On Nov 30, 2017, at 12:58 AM, Храмченков Николай <[email protected]> wrote: > > Hi, > > I tried already with anonymous and non the anonymous classes, but result is > the same ClassNotFoundException. > I thought there is some obvious explanation to this exception. > > 30.11.2017, 11:27, "Olivier Mallassi" <[email protected]>: >> not sure but could be worth trying with a concrete Function class (like >> MyFunction implements/extends Function) and not the anonymous one. >> again, not sure. >> >> HTH >> >> On Thu, Nov 30, 2017 at 9:00 AM, Храмченков Николай <[email protected] >> <mailto:[email protected]>> wrote: >> 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.
