RMI/Proxy на Цейлоне и отношение к нестандартным методам

Я хочу написать библиотеку RMI в/для Цейлона (поскольку пока не нашел).

Первое, что мне нужно, это прокси. В Java я использовал что-то вроде

Proxy.newProxyInstance(classLoader, interfaces, handler);  

1. Есть ли что-то подобное на Цейлоне? (что-то не нашел)


Пытаясь написать что-то подобное самостоятельно, я наткнулся на этот решение для JVM с использованием манипуляций с байт-кодом. Шикарно и именно то, что я хочу.

Обратите внимание, что это может даже создать прокси для класса, а не только для интерфейса, как в Java. На Цейлоне это должно быть допустимо, так как здесь нет полей, и мы можем смоделировать весь класс с помощью вызовов методов.

2. Если создавать прокси для классов нельзя, просто скажите мне об этом. Кроме того, какова интуиция/будущее Цейлона в отношении прокси? Будут (нет) прокси?


В будущем с прокси у нас есть одна большая проблема:

На Цейлоне у нас есть ключевое слово default, без него метод не может быть уточнен/перезаписан. Это также приводит к final методам для скомпилированных выходных классов Java. Таким образом (даже не) манипулирование байтовым кодом может перезаписать их и перенаправить на обработчик/перехватчик вызова.

3. Как с этим справиться?


Я полагаю, что нет? Я полностью понимаю идею запрета уточнения методов и ключевых слов default/final, но это препятствует RMI/прокси для классов.

4. Являются ли прокси для классов плохой идеей?


И да, есть гораздо больше вопросов, над которыми я сейчас думаю и изучаю: реализация JS, интерфейсы и методы по умолчанию и т. д.

Эти пункты кажутся наиболее актуальными на данный момент, поэтому начнем с них.


person Matthias Sokolowski    schedule 29.07.2017    source источник


Ответы (2)


Вы можете попробовать использовать этот модуль, который я написал:

https://github.com/gavinking/ceylon.proxy

В качестве альтернативы, если вы ориентируетесь только на JVM, вы можете просто использовать Java Proxy напрямую.

person Gavin King    schedule 29.07.2017

В ходе дальнейших исследований я обнаружил:

1. Прокси-серверы в настоящее время являются частью этапа Ceylon 1.4 (проблемы, связанные с прокси-серверами).

3. Включение режима EE для компилятора Ceylon удаляет ключевое слово final.

С этого момента решение, которое я нашел, работает так, как задумано, и точно такое же, как и решение, предоставленное Гэвином.

person Matthias Sokolowski    schedule 30.07.2017