{IgniteServices#service(String name)} returns direct reference in the
current implementation.

So, class casting should work for your example:
((MyServiceImpl)ignite.services().service(“myService”)).bar();

It is safer to use an interface instead of an implementation, there is no
guarantee that in future releases direct link will be returned, a service
instance might be wrapped for monitoring for example.


On Tue, Feb 25, 2020 at 4:09 PM Vladimir Steshin <vlads...@gmail.com> wrote:

> Vyacheslav, Hi.
>
> I see. But can we consider 'locally deployed service' is a proxy too, not
> direct reference? What if I need to wrap it? This would be local service
> working via proxy or null.
>
> вт, 25 февр. 2020 г. в 16:03, Vyacheslav Daradur <daradu...@gmail.com>:
>
>> Hi, Vladimir
>>
>> The answer is in API docs: "Gets *locally deployed service* with
>> specified name." [1]
>>
>> That means {IgniteServices#service(String name)} returns only locally
>> deployed instance or null.
>>
>> {IgniteServices#serviceProxy(…)} returns proxy to call instances across
>> the cluster. Might be used for load-balancing.
>>
>> [1]
>> https://github.com/apache/ignite/blob/56975c266e7019f307bb9da42333a6db4e47365e/modules/core/src/main/java/org/apache/ignite/IgniteServices.java#L569
>>
>> On Tue, Feb 25, 2020 at 3:51 PM Vladimir Steshin <vlads...@gmail.com>
>> wrote:
>>
>>> Hello, Igniters.
>>>
>>> Previous e-mail was with wrong topic 'daradu...@gmail.com' :)
>>>
>>> I got a question what exactly IgniteServices#service(String name) is
>>> supposed to return: reference to the object or a proxy for some reason like
>>> IgniteServices#serviceProxy(…)? Vyacheslav D., can you tell me your opinion?
>>>
>>> public interface MyService {
>>>
>>>                public void foo();
>>>
>>> }
>>>
>>> public class MyServiceImpl implements Service, MyService {
>>>
>>>                @Override public void foo(){ … }
>>>
>>>                public void bar(){ … };
>>>
>>> }
>>>
>>>
>>> // Is it required to support
>>>
>>> MyServiceImpl srvc = ignite.services().service(“myService”);
>>>
>>> srvc.foo();
>>>
>>> srvc.bar();
>>>
>>>
>>>
>>> // Or is the only correct way:
>>>
>>> MyService srvc = ignite.services().service(“myService”);
>>>
>>> srvc.foo();
>>>
>>>
>>
>> --
>> Best Regards, Vyacheslav D.
>>
>

-- 
Best Regards, Vyacheslav D.

Reply via email to