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]> 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$ExecuteRegionFunctionSingleHop > OpImpl.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. >
