It is not a change of public API from my point of view.

Also, there is a check to allow getting proxy only for an interface, not
implementation.

Denis, what do you think?


вт, 25 февр. 2020 г. в 16:28, Vladimir Steshin <vlads...@gmail.com>:

> Vyacheslav, this is exactly what I found. I'm doing [1] (metrics for
> services) and realized I have to wrap local calls by a proxy. Is it a
> change of public API and should come with major release only? Or we can
> declare usage of services without interfaces incorrect?
> [1] https://issues.apache.org/jira/browse/IGNITE-12464
>
> вт, 25 февр. 2020 г. в 16:17, Vyacheslav Daradur <daradu...@gmail.com>:
>
>> {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.
>>
> --
Best Regards, Vyacheslav D.

Reply via email to