Реализация доступа к 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, то как обращаться к его свойствам и методам?
        Заранее благодарен!
        >> Ответить
    • Развернуть ещё пример (+) ( Лепихов Андрей  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, поэтому и заинтересовался этой реализацией
          >> Ответить