Реализация доступа к Java из RSL
5 (2)
Реализация доступа к Java из RSL ( Paul 25.04.2014 18:16 )
5(1)Добрый день всем!
Наткнулся на тему: http://members.softlab.ru/kubrin/Files/rsjvm.htm
Огромное спасибо Сергею Кубрину за эту реализацию.
Не могу разобраться, как всё это работает. У кого есть примеры, поделитесь пожалуйста.
Заранее благодарен.
>> ОтветитьПрисоединяюсь ( svolosch 25.04.2014 19:22 )
5(1)Not specified
>> Ответитьпример ( Лепихов Андрей 22.05.2014 18:56 )
5(1)import rcw; var jvm = CreateObject("rsjvm", "TJavaHost", null, true); var res = jvm.CallStaticMethod("java.lang.String", "valueOf", -777); msgbox(res);
>> ОтветитьА не подскажете ( svolosch 23.05.2014 09:55 )
5(1)Как настроить? Я что-то не разобрался с ini-шниками и прочим... Пример инишника не скинете?
>> Ответитьнапишу чуть позже (-) ( Лепихов Андрей 23.05.2014 10:43 )
5(1)Not specified
>> Ответитьrsjvm.ini ( Лепихов Андрей 23.05.2014 11:33 )
5(2)В принципе, в rsjvm.ini нужно прописать только путь к вашим Java-классам (либо к jar-архиву). Всё должно работать и так.
Если у вас установлено несколько JVM, то можно указать явно с какой из них работать. Например:
JVM = C:\java\jdk1.7.0_51\jre\bin\client\jvm.dll
На первых порах лучше включить лог ошибок Java (не перехваченных исключений):
LOGFILE = ../TxtFile/Java.err
Если хотите отлаживать Java-код из-под RsBank, раскомментируйте опции отладки:
OPTION = -Xdebug
OPTION = -Xnoagent
OPTION = -Xrunjdwp:transport=dt_socket,address=localhost:4000
Здесь есть нюанс: с такой включённой отладкой нужно перед запуском RsBank обязательно запустить отладчик в режиме ожидания. В противном случае JVM молча завершит процесс RsBank.
>> ОтветитьСпасибо огромное!!! ( svolosch 23.05.2014 11:36 )
5(1)Not specified
>> Ответитьотладчик ( Лепихов Андрей 23.05.2014 11:54 )
5(1)Для отладки в NetBeans в меню выбираем Debug->Attach Debugger:
Debugger: Java Debugger (JPDA)
Connector: SocketListen
Transport: dt_socket
Local address: localhost
Port: 4000
Timeout: 300000
Если есть какие-то проблемы с отладкой, проверьте в Windows->Debugging->Sources, что путь к исходникам есть и он правильный.
ЗЫ. Если б у нас вчера не отключили интернет, когда б я до этой темы добрался :)
>> Ответить
А как рабоать с этим объектов? ( Paul 23.05.2014 10:10 )
5(1)А как работать с этим объектом и вообще являеться ли в этом примере res объектом String?
Если это объект, то как выхвать свойство объекта, например res.length.
Т.е. если я создал объект какого-либо класса Java, то как обращаться к его свойствам и методам?
Заранее благодарен!
>> Ответитьres является RSL-строкой (+) ( Лепихов Андрей 23.05.2014 10:47 )
5(1)Для встроенных типов осуществляется автоматическое преобразование. Для объектов других классов Java создаются RSL-обёртки. Вы можете вызывать методы Java-классов как у обычного RSL-объекта.
>> ОтветитьПонял, спасибо. попробую. Пример кину сюда. ( Paul 23.05.2014 10:51 )
5(1)Not specified
>> Ответить
ещё пример (+) ( Лепихов Андрей 23.05.2014 11:08 )
5(2)Создаём файл JavaTest.java:
public class JavaTest { public String yes(String name) { return "Превед, " + name; } public void no() { System.exit(0); } }
Компилируем
javac JavaTest.java
Упаковываем (не обязательно):
jar -cf JavaTest.jar JavaTest.class
Копируем JavaTest.jar в папку RsBank\Java (для примера).
Прописываем путь в файле rsjvm.ini:
PATH = ../Java/JavaTest.jar
Создаём макрос:
import rcw; var jvm = CreateObject("rsjvm", "TJavaHost", null, true); var obj = jvm.createJavaObject("JavaTest"); var res = GetTrue(true, "Любите ли вы Java?"); if (res) msgbox(obj.yes("медвед")); else obj.no(); end;
Запускаем и отвечаем правдиво :)
>> Ответитьзапуск ( Лепихов Андрей 23.05.2014 11:20 )
5(1)Последний параметр в функции CreateObject определяет, где будет поднята JVM. Если параметр равен true, JVM поднимется на сервере приложений, если false, то на терминале.
var jvm = CreateObject("rsjvm", "TJavaHost", null, false); // JVM поднимется на терминале
>> ОтветитьСпасибо огромное. ( Paul 23.05.2014 13:40 )
5(1)Просто есть идея реализовать 407-П используя для работы с XML библиотеку XmlBeans, поэтому и заинтересовался этой реализацией
>> Ответить