Hi,
I have one more query. In my usecase, i submit thousands of similar compute
tasks as ignite callable from ignite client to server nodes. And i have
deployed app libs on ignite nodes to avoid peer class loading network cost.
As per my understanding, as soon as ignute client submit task to grid, it
will deserialize the task class along with its fields and execute it. This
happems on each task submitted.

My question is, is there a way I can avoid this deserialization overhead
for same task submited again with different field values.
Some what like holding same DemoTask instance but calling its call method
several times with different parameters

DemoTask implements IgniteCallable<POJO>{

List<String> trades;
String clientName;
LocalDate asof;
.....constr..... get set......

.....call() ....override
}


On Sat, Oct 30, 2021, 14:44 Surinder Mehra <redni...@gmail.com> wrote:

> Hi,
> I found the list. So required list is:
> annotations.jar
> kotlin-reflect.jar
> kotlin-stdlib.jar
> kotlin-stdlib-common.jar
> kotlin-stdlib-jdk8.jar
>
> For  something very basic, only thing I only needed was
> kotlin-stdlib.jar(1.5.31) to run my program. I guess others are needed as
> required. Thanks for help.
>
>
> On Sat, Oct 30, 2021 at 1:04 PM Surinder Mehra <redni...@gmail.com> wrote:
>
>> I have mixed  setup, where java client trying to run kotlin function on
>> ignite server. Also  i dont run server and client in intelliJ. If I run
>> both client and server in IntelliJ, it works. So I am trying to find out
>> what list of jars IntelliJ is providing which are missing in standalone
>> ignite node libs.
>> here are my steps.
>> 1. compile and create jar file using gradle
>> 2. copy jar file and kotlin stdlib-jdk8 file to local ignite/libs
>> directory
>> 3. start server node
>> 4. start client node
>>  5. Client and server both running ignite 2.11.0 and jdk : openjdk
>> 11.0.12+7-LTS, OS : Linux 4.14.248-189.247.amzn2.x86_64 amd62
>> MockTest.kt
>>
>> fun abc(x: Int): () -> Int ={
>> println("Kotlin prints : " + (x*2))
>> x*2
>> }
>>
>> Java main file:
>> Test{
>> psvm(){
>>
>> IgniteConfiguration igniteConfiguration = new IgniteConfiguration()
>>                 .setClientMode(true)
>>                 .setPeerClassLoadingEnabled(true);
>>
>> Ignite ignite = Ignition.start(igniteConfiguration)
>>
>>     ignite.compute().run(() ->  abc(1).invoke());
>> }
>>
>> Server node is simple ignite node with peer class loading enabled
>>
>> Exception : NoClassDefinitionFoundError kotlin/jvm/functions/Function0
>>
>> On Fri, Oct 29, 2021 at 8:09 PM Stephen Darlington <
>> stephen.darling...@gridgain.com> wrote:
>>
>>> As long as it can peer-class-load the necessary classes (or they’re
>>> already deployed on the server side) it should work. This works on my
>>> machine:
>>>
>>> val cfg = IgniteConfiguration()
>>>         .setClientMode(true)
>>>         .setPeerClassLoadingEnabled(true)
>>> Ignition.start(cfg)
>>>         .use { ignite ->
>>>             ignite.compute().run() { println("Hello") }
>>>         }
>>>
>>>
>>> On 29 Oct 2021, at 13:20, Surinder Mehra <redni...@gmail.com> wrote:
>>>
>>> Hi Thanks much for investigating it with me.  After spending lot of
>>> time on it, I found that client and servers were running on different JDK
>>> versions. Client running in java 11 was submitting tasks to server node
>>> running on java 8. I upgraded java version on server node and it worked.
>>>
>>> Actually I have another question. Does ignite needs any extra
>>> dependencies to run tasks written in Kotlin. I am getting below error when
>>> try to run kotlin code as part of task
>>>
>>> Caused by: java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
>>> at com.test.TestTask.<clinit>(TestTask.kt:36)
>>> Caused by: java.lang.ClassNotFoundException:
>>> kotlin.jvm.internal.Intrinsics
>>> at
>>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
>>> at
>>> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
>>> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
>>> ... 45 more
>>>
>>> On Wed, Oct 27, 2021 at 9:57 PM Stephen Darlington <
>>> stephen.darling...@gridgain.com> wrote:
>>>
>>>> Using Ignite 2.11 and the following code works.
>>>>
>>>> Server:
>>>>
>>>> public class ComputeServer {
>>>>     public static void main(String[] args) {
>>>>         IgniteConfiguration igniteConfiguration = new IgniteConfiguration()
>>>>                 .setPeerClassLoadingEnabled(true);
>>>>         Ignite ignite = Ignition.start(igniteConfiguration);
>>>>     }
>>>> }
>>>>
>>>> Client:
>>>>
>>>> public class ComputeClient {
>>>>     public static void main(String[] args) {
>>>>         IgniteConfiguration igniteConfiguration = new IgniteConfiguration()
>>>>                 .setClientMode(true)
>>>>                 .setPeerClassLoadingEnabled(true);
>>>>         try (Ignite ignite = Ignition.start(igniteConfiguration)) {
>>>>             ignite.compute().run(() -> System.out.println("Hello, world"));
>>>>         }
>>>>
>>>>     }
>>>> }
>>>>
>>>> (It executes on server nodes by default; you don’t need to create a
>>>> cluster group for that.)
>>>>
>>>> So I think you’ll need to share more about your configuration and/or
>>>> code to get to the bottom of this.
>>>>
>>>> On 27 Oct 2021, at 16:47, Surinder Mehra <redni...@gmail.com> wrote:
>>>>
>>>> Just wondering if it is possible at all. All examples/demos I have seen
>>>> are either using a thin client  or one server node submitting a task to the
>>>> grid, or with affinity to a particular node. I have tried all compute apis,
>>>> like run, call, runAffinity. callaffinity, broadcast. none of them works
>>>> when submitted from client node. They do run if I change clusterGroup to
>>>> local nodes. like ClusterGroup grp = ignite.cluster().forLocalNodes();
>>>>
>>>> On Wed, Oct 27, 2021 at 6:20 PM Surinder Mehra <redni...@gmail.com>
>>>> wrote:
>>>>
>>>>> yes, it is enabled. Even if that wasn't enabled, I should get class
>>>>> not found error. Here i dont get any error but its simply doesn't execute.
>>>>> I see below flag needs to be enabled for thin client. Is there any
>>>>> setting for thick clients as well ?
>>>>>
>>>>> https://ignite.apache.org/docs/latest/thin-clients/java-thin-client
>>>>>
>>>>> <bean class="org.apache.ignite.configuration.IgniteConfiguration" 
>>>>> id="ignite.cfg">
>>>>>     <property name="clientConnectorConfiguration">
>>>>>         <bean 
>>>>> class="org.apache.ignite.configuration.ClientConnectorConfiguration">
>>>>>             <property name="thinClientConfiguration">
>>>>>                 <bean 
>>>>> class="org.apache.ignite.configuration.ThinClientConfiguration">
>>>>>                     <property name="maxActiveComputeTasksPerConnection" 
>>>>> value="100" />
>>>>>                 </bean>
>>>>>             </property>
>>>>>         </bean>
>>>>>     </property></bean>
>>>>>
>>>>>
>>>>> On Wed, Oct 27, 2021 at 6:04 PM Stephen Darlington <
>>>>> stephen.darling...@gridgain.com> wrote:
>>>>>
>>>>>> Did you enable peer class loading?
>>>>>>
>>>>>> > On 27 Oct 2021, at 13:18, Surinder Mehra <redni...@gmail.com>
>>>>>> wrote:
>>>>>> >
>>>>>> > Hi,
>>>>>> > I have a sever node and a thick client node running. I am trying to
>>>>>> submit ignite compute job from client node to server node but it doesn't
>>>>>> work.
>>>>>> >
>>>>>> > ClusterGroup grp = ignite.cluster().forServers()
>>>>>> > IgniteCompute ignieCompute = ignite.compute(grp);
>>>>>> > igniteCompute.run(() ->  System.out.println("Task Executed"));
>>>>>> >
>>>>>> > Sysout never printed on console and client keeps running. If I
>>>>>> change it to server mode, tasks completed immediately.
>>>>>> >
>>>>>> > Can someone help me understand if I am missing some configuration?
>>>>>> >
>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>>>
>>>

Reply via email to