You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geode.apache.org by Храмченков Николай <xn...@yandex.ru> on 2017/11/30 08:00:00 UTC

ClassNotFoundException on FunctionService.onRegion(...).execute(function)

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.

Re: ClassNotFoundException on FunctionService.onRegion(...).execute(function)

Posted by Anthony Baker <ab...@pivotal.io>.
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, Храмченков Николай <xn...@yandex.ru> 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" <ol...@gmail.com>:
>> 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, Храмченков Николай <xnike@yandex.ru <ma...@yandex.ru>> 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.


Re: ClassNotFoundException on FunctionService.onRegion(...).execute(function)

Posted by Olivier Mallassi <ol...@gmail.com>.
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, Храмченков Николай <xn...@yandex.ru> 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.
>