JVM Native API плагин - для запуска в 1С плагинов написанных на Java

Публикация № 850716

Разработка - Разработка внешних компонент

ВК Java v8 Dev kafka JVM Native api

22
Запускаем виртуальную машину Java в 1С. Собрана внешняя компонента которая позволяет запускать виртуальную машину java в среде 1С. Позволяет как передавать параметры в java - так и получать уведомление через externalevent. Предпосылкой создания являлся тот факт, что есть много готового функционала которого не хватает в 1С. Язык сpp - довольно сложен для быстрой разработки, и теперь возможно использовать готовые сборки java классов (так называемые jar-файлы) для использования в 1С.

Собрана только под Windows 32-bit и 64-bit!

Компонента позволяет запускать виртуальную машину Java в 1С, загружать необходимые jar – библиотеки, а так же выполнять методы.

GITHUB репозиторий: JVM-plugin

В примере собранный jar-файл с двумя классами:

  1. первый пример вычисляет факториал и выводит в лог строку;
  2. второй пример вычисляет расстояние Левенштейна для двух строк;
  3. загрузка файла - по имени файла возвращает двоичные данные;
  4. "скриншот" - возвращает скриншот экрана в виде двоичных данных.

Также запускались различные библиотеки, эмуляторы и прочее. Проверялась работа в асинхронном режиме.

Ограничения:

  •  Виртуальная машина запускается один раз и может быть запущена только в одном экземпляре;

  • После завершения работы виртуальная машина не может быть повторно запущенна;

  •  Разрядность виртуальной машины должна соответствовать разрядности 1С;

  •  Добавлять jar-файлы после запуска JVM нельзя;

  •  Обновить java классы после запуска JVM нельзя;

  • Возможны проблемы с повторным запуском javafx - приложений.

Для работы необходима установленная JDK 8

  1. Первый параметр JAVA_HOME путь к JDK (32-bit или 64-bit в зависимости от клиента 1С);
  2. Второй так называемый CLASSPATH - путь к jar библиотекам.
  3. Для корректной работы необходимо установить переменную среды: JAVA_HOME

В архиве приложена конфигурация и собранный(подписанный) jar-файл.

Пример работы с компонентой:

Работа в клиент-серверном варианте в СКД:

Написание плагина для Kafka (Simple Consumer)

 

Kafka producer + consumer - параллельно.

 

22

Скачать файлы

Наименование Файл Версия Размер
Демо Native api компонента для использования в 1С плагинов написанных на java (Демо режим с ограниченной функциональностью)
.zip 35,68Mb
29.11.19
9
.zip 0.0.7 35,68Mb 9 Скачать
bouncy castle provider
.zip 2,13Mb
22.06.18
5
.zip 2,13Mb 5 Скачать
Native API компонента для использования в 1С плагинов, написанных на Java - без привязки к сертификатам
.zip 119,86Kb
29.11.19
2
.zip 1.0.0 119,86Kb 2 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. blackhole321 1121 20.06.18 21:28 Сейчас в теме
А пример кода 1С:Предприятие (типа пример использования) можно добавить в публикацию?
2. minimajack 60 20.06.18 21:59 Сейчас в теме
(1) Компонента находится в стадии разработки
Если ПодключитьВнешнююКомпоненту(имядлл, "AddInNative",ТипВнешнейКомпоненты.Native ) Тогда
	Сообщить("Подключилась!");
	ОбъектJvm = Новый("AddIn.AddInNative.JVMLauncher");
	ОбъектJvm.javaHome = "d:/Program Files (x86)/Java/jdk1.8.0_172/";
	ОбъектJvm.libraryDir = "d:/";
	ОбъектJvm.AddJar("Runner-0.0.1-SNAPSHOT.jar");
КонецЕсли;
Показать

Далее вызываем метод и передаем имя java-класса который будет исполнять работу.
ОбъектJvm.LaunchInJVM("Compare");
ОбъектJvm.LaunchInJVM("Runner");
3. blackhole321 1121 20.06.18 22:21 Сейчас в теме
4. minimajack 60 20.06.18 22:54 Сейчас в теме
(3) Само апи пока не закончено. То есть передавать параметры можно - но в демо примере такого нет.
Разница между 1С и java слишком большая и скорее всего придется подготовить некоторый набор вариантов вызова:
LaunchInJVM - без параметра
LaunchInJVM_S с одним параметром типа строка
LaunchInJVM_SS с двумя параметрами типа строка
5. OLEG4120 143 21.06.18 09:00 Сейчас в теме
7. minimajack 60 21.06.18 10:48 Сейчас в теме
(5) возможность использования многочисленных java библиотек
6. fishca 1163 21.06.18 09:14 Сейчас в теме
8. minimajack 60 21.06.18 10:50 Сейчас в теме
(6) пока должным образом не проверял - сейчас апи наладить бы
12. minimajack 60 22.06.18 07:51 Сейчас в теме
(6) Потестил чуть больше - взлетает, по крайней мере виртуальную машину удалось завести (на 32-битах). Думаю проблем особых не будет.
Остальной код надо портировать и проверять
9. minimajack 60 21.06.18 14:21 Сейчас в теме
Обновил пример.
Поправил api - на текущий момент возможно вызывать передавая до 2-х параметров. Эти функции синхронные - то есть 1С ожидает завершения выполнения методов.

ОбъектВК.LaunchInJVM(<ИмяКласса>); - без параметров
ОбъектВК.LaunchInJVMP(<ИмяКласса>,<Параметр>); - с 1-м
ОбъектВК.LaunchInJVMPP(<ИмяКласса>,<Параметр1>,<Параметр2>); - с 2-мя

Типы параметров: строки, числа, булево. На основании типов параметров ищется метод в java ну и вызывается собственно.

Кейсы самые разные: что то вычислять (работает JIT-компилятор, поэтому шустро), создавать дополнительные окна (работает swing, awt) с информацией, чаты, да что угодно в общем то.
10. Infactum 283 21.06.18 15:57 Сейчас в теме
(9) Можно просто XML с параметрами передать. Будет один метод.
11. minimajack 60 21.06.18 16:13 Сейчас в теме
(10) иногда все же удобней хотя бы 2...например передать бинарные данные и строку, все же лучше чем конвертировать в xml, а потом распаковывать в java
13. minimajack 60 22.06.18 13:48 Сейчас в теме
Добавлены функции возвращающие байтики:
CallFInJVMB - без параметров
CallFInJVMBP - с одним параметром
CallFInJVMBPP - с двумя параметрами

Для примера:
CallFInJVMB - ОбъектВК.CallFInJVMB("ScreenShot"); получение скриншота экрана
CallFInJVMBP - ОбъектВК.CallFInJVMBP("GetFile", ПутьКФайлу); чтение файла

Вот такое в java - 2 строки и никакой возни с cpp
 
        Path path = Paths.get( file );
        return Files.readAllBytes( path );
    

Скриншот уложился в 5 строк
        Robot robot = new Robot();
        BufferedImage screenShot = robot.createScreenCapture( new Rectangle( Toolkit.getDefaultToolkit().getScreenSize() ) );
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        ImageIO.write( screenShot, "JPG", buffer );
        return buffer.toByteArray();
    

p.s. Вот и преимущества java - работает из коробки, никаких плюсов (которые с++) и кроссплатформенно
p.s.s. Архив обновлен
14. minimajack 60 22.06.18 16:56 Сейчас в теме
Как повернуть PDF на 90 градусов
tPdf = ПолучитьИмяВременногоФайла("pdf");
		byteData = ОбъектВК.CallFInJVMBP("PDFRotator", ПутьКПДФ); 
		byteData.Записать(tPdf);
		ЗапуститьПриложение(tPdf);


В файлы добавлен bouncy castle provider - который надо распаковать в JAVA_HOME\jre\lib\ext\
Можно скачать самостоятельно
 bcmail-jdk15on-1.47.jar
bcpkix-jdk15on-1.47.jar
bcprov-jdk15on-1.47.jar


Java код
    PdfReader reader = new PdfReader( fileName );
        int n = reader.getNumberOfPages();
        int rot;
        PdfDictionary pageDict;
        for ( int i = 1; i <= n; i++ )
        {
            rot = reader.getPageRotation( i );
            pageDict = reader.getPageN( i );
            pageDict.put( PdfName.ROTATE, new PdfNumber( rot + 90 ) );
        }
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfStamper stamper = new PdfStamper( reader, baos );
        stamper.close();
        reader.close();
        return baos.toByteArray();
Показать
15. virtex3 18 23.06.18 07:31 Сейчас в теме
а как на счет варианта, чтобы компонента работала на linux сервере где и запущен сервер 1С, чтобы пользователи не заморачивались с жавой?
16. minimajack 60 23.06.18 09:31 Сейчас в теме
(15) Под линукс ещё не портировал - да и на сервере не тестил.
Java это не только утилити возможности...
Визуализация полезна: для производства или склада можно отображать 3d модель по нажатию кнопки, отображать графики показателей(оборудования или ещё чего)...
Тот же пдф-повернуть? Зачем кидать на сервер(с сервера) сотни мегабайт, если локально за секунды получим результат?
В общем случае - не важно...есть инструмент, а как им работать каждый решает сам для себя
17. so-quest 130 27.06.18 07:49 Сейчас в теме
Наглый вопрос - Открытый репозиторий у компоненты есть?
19. minimajack 60 27.06.18 09:18 Сейчас в теме
18. Voffka 27.06.18 08:30 Сейчас в теме
20. minimajack 60 27.06.18 13:00 Сейчас в теме
Обновил примеры:
Можно открывать 3d модели(формат obj), вращать, приближать-удалять
21. minimajack 60 27.06.18 14:24 Сейчас в теме
Для всех стесняющихся - добавлено видео
o.nikolaev; +1 Ответить
22. minimajack 60 01.08.18 09:38 Сейчас в теме
Добавлен возврат строк из вызовов, архив обновлен.
Для примера используется распознавание ШК из картинки и возврат ШК в виде строки.
Строка64 = Base64Строка(Новый ДвоичныеДанные(ПутьКИзображениюШК));
Сообщить(ОбъектВК.CallFInJVMP("CodeScanner", Строка64, ""));

в java
   public static String mainInt(String param) throws IOException, NotFoundException
    {
        ByteBufferInputStream is = new ByteBufferInputStream( ByteBuffer.wrap( Base64.decode( param ) ) );
        BufferedImage bufferedImage = ImageIO.read(is);
        LuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

        Result result = new MultiFormatReader().decode(bitmap);
        return result.getText();

    }
Показать
o.nikolaev; +1 Ответить
23. haverlon 10 11.12.18 15:09 Сейчас в теме
Вещь интересная, под Linux бы пользовалась спросом)))
24. minimajack 60 11.12.18 15:54 Сейчас в теме
(23) сомневаюсь...доля windows юзеров значительно больше - а спроса нет
25. Evil Beaver 6403 01.01.19 12:24 Сейчас в теме
Правильно ли я понял, что это аналог .NET Bridge для 1С от Elisy, только под Яву?
26. minimajack 60 01.01.19 19:45 Сейчас в теме
Это не полноценный мост...
Изначально позиционируется как замена внешних компонент на c++.
Концепция с созданием классов как в .NET bridge - но в 1с - мне не нравится.
А так написал полноценный код на java -> потестил -> упаковал и все запускается и в 32 и 64 битном режиме без танцев с бубнами.
27. minimajack 60 11.01.19 14:06 Сейчас в теме
Добавлено видео по работе с СКД в клиент-северном варианте.

Использовалась стандартная консоль СКД (разрешен вызов функций из общих модулей) на управляемых формах:
В вычисляемые поля добавлено ВызватьJavaКлиент("CompareDouble", Числа,&Поиск) - что приводит к вызову java функции с передачей параметров и возвратом результатов.

Получаем вычисляемое поле с расстоянием Левенштейна в консоле СКД

p.s. для 12000 строк, вызов функции происходил 36000 раз за 6,38 сек. на сервере

28. minimajack 60 16.01.19 15:50 Сейчас в теме
В публикацию добавлен пример написания простейшего плагина для чтения из Apache Kafka.
o.nikolaev; +1 Ответить
29. minimajack 60 17.01.19 16:10 Сейчас в теме
Архив обновлен, вместе с получателем добавлен демо-издатель Kafka.
Прежде чем тыкать в Кафку, необходимо запустить зукипер и кафка-сервер, иначе будете ждать подключения...

По нажатию на "Send to Kafka" - будет отправлено 10 000 пронумерованых сообщений на сервере (асинхронно). При ожиданиях между отправкой более 10 секунд издатель отправляет сообщение "Producer closed" и закрывается

По нажатию на "Load from Kafka" - будет получено либо 500 сообщений с начала партиции (если пустое поле данных), либо произойдет ожидание 5 секунд для получения данных.

Оба и издатель и подписчик обмениваются данными через топик "testTopic"
Перформанс:
1С + java - 3696 сообщений/сек
Вызов без 1С на java - 36554 сообщений/сек
Прикрепленные файлы:
o.nikolaev; +1 Ответить
39. o.nikolaev 194 17.11.19 14:42 Сейчас в теме
(29) На видео у вас в обработке еще нет команды Send to Kafka. Но в cf-ке в публикации уже есть. В файловом варианте, чтобы добиться выполнения команды send to немножко исправил текст команды:
&НаКлиенте
Процедура SendToKafka(Команда)
	//SendToKafkaНаСервере();
	Для нумератор=1 По 20000 Цикл
		ОбъектВК.CallFInJVMPP("KafkaExampleProducer",Строка(нумератор),Строка(нумератор), 1);
	КонецЦикла;
КонецПроцедуры
Показать


Подскажите, не по этому (https://dzone.com/articles/running-apache-kafka-on-windows-os) примеру все настраивали? :)
40. o.nikolaev 194 17.11.19 14:45 Сейчас в теме
(29) Все отлично работает. Спасибо!
Прикрепленные файлы:
30. minimajack 60 18.01.19 16:43 Сейчас в теме
Путем нехитрых манипуляций удалось ускорить издателя до 8-10 тысяч сообщений в секунду.
p.s. Архив обновлен
p.p.s. К сожалению количество сообщений пришлось увеличивать до 20 тысяч что бы замерить скорость...так что жать кнопку "Load from Kafka" придется в два раза больше
31. o.nikolaev 194 29.10.19 11:03 Сейчас в теме
Очень круто. А какой-то полноценный стабильный релиз, который в проде можно использовать, есть?
32. minimajack 60 31.10.19 22:30 Сейчас в теме
(31) в проде не использовал, но сомневаюсь что могут быть какие то серьезные проблемы.
Планировал выложить в опенсорс, но надо причесать исходники. А на это надо найти время.
33. o.nikolaev 194 31.10.19 23:03 Сейчас в теме
(32) А может ну его - причесывание - и выложить как есть :) ? Уж очень завораживающая вещь получилась. Просто думаю нашлись бы люди которые занялись и причесыванием и развитием.
34. minimajack 60 01.11.19 22:41 Сейчас в теме
(33) я не первый раз выкладываю...что то энтузиастов не находилось.
По факту мне надо убрать код проверки сертификата для паблика.
35. o.nikolaev 194 16.11.19 21:47 Сейчас в теме
(34) Так. Нет времени объяснять :) Что я могу сделать чтобы вы выложили исходники в public ? :)
36. o.nikolaev 194 16.11.19 23:36 Сейчас в теме
Не получается воспроизвести примеры. Выдается сообщение "JVMLauncher : Cannot find class.". Можете подсказать что не так делаю?
37. o.nikolaev 194 17.11.19 00:03 Сейчас в теме
(36) Отвечаю сам же. Подключил папку subst-ом как диск d:\ и положил в нее Runner-0.0.1-SNAPSHOT.jar
После этого пример заработал :)
38. minimajack 60 17.11.19 09:54 Сейчас в теме
Все верно. jar файлы загружаются из classpass(library dir)
Исходники надо очистить от сертификата. Если все срочно - напишите в личку, соберу индивидуально
41. o.nikolaev 194 17.11.19 14:54 Сейчас в теме
Ну и исходники Runner-0.0.1-SNAPSHOT.jar было бы бесценно скачать за SM вместе с выложенным примером. :) Подхватить-то удается конечно, но жалуется что Source not found :)
Прикрепленные файлы:
42. o.nikolaev 194 17.11.19 15:01 Сейчас в теме
Глупый вопрос - а зачем подписывать jar файлы?
43. minimajack 60 17.11.19 16:46 Сейчас в теме
(42) затем, что демокомпонента проверяет подпись и не дает выполнить неподписанный код.
Практически все исходники есть тут в качестве комментариев. Да и в любой ide можно глянуть...ничего там нет секретного)
44. o.nikolaev 194 17.11.19 20:51 Сейчас в теме
Еще вопрос - а предполагается развитие API? Чтобы все-таки можно было вызывать public методы java согласно их сигнатур? Еще вопрос: если, например в пакете в классе есть метод который возвращает значение типа другого класса, то можно ли помещать такое значение в переменную кода 1С и затем передавать в качестве параметра другому методу java-класса? Понимаю что можно это обойти создав, например void метод-обертку, который будет выполнять эту же операцию в самом java классе, но все-таки. Есть какие-то планы на этот счет?
45. minimajack 60 17.11.19 22:55 Сейчас в теме
Не вижу никакого смысла в вызове...ни скорости ни удобства.
Апи планируется править, но точно не в эту сторону.
Более рационально использовать как дополнение к native api - когда весь код заранее можно протестировать, а в 1с уже полноценно использовать
46. minimajack 60 18.11.19 09:15 Сейчас в теме
Добрался до компа...
Просто создавая объекты java, вызывая методы мы теряем во всем.

По сути вы хотите тот же Elisy.Net Bridge только на java.
плюсы:
- не надо собирать jar файлы
- можно писать код типа на java
минусы:
- в 99% случаев все равно потребуются какие то библиотеки, и одно дело когда мы собираем так называемый UberJar - со всем вместе( а там и включаем свои классы), другое что нам придется прописывать все jar файлы ручками и следить за их версиями...
- не возможно полноценное тестирование перед заливкой в 1С - юнит тесты и прочее проще организовать в java, а там и гит и все остальное из коробки.
- сами себе режем производительность: interop вызовы не бесплатны, чем реже прыгать java -> 1C -> java и т.п. тем выше скорость решения
- теряем в функциональности java - многие конструкции станут недоступны: try-with-resources, multicatch, case и т.п. это как вернутся в каменный век :)
48. o.nikolaev 194 18.11.19 22:18 Сейчас в теме
(46) :) Да, ступил. Это я уже потом и сам сообразил. Не столь развернуто правда :)
47. minimajack 60 18.11.19 10:20 Сейчас в теме
https://gist.github.com/MinimaJack/8573b375a1f5121a06e5b03c53c6f6aa
KafkaExampleProducer.java
предпосылки:
1. демо пример
2. получить максимум производительности за минимально затраченное время на разработку

Когда происходит вызов 1С, никакой отправки на самом деле не происходит, вместо этого:
при каждом вызове проверяется java-поток на наличие, и если его нет происходит запуск
при каждом вызове в очередь сообщений кладется сообщение

Java-поток берет на себя обязательства по отправке сообщений, опустошает очередь отсылая сообщения, при отсутствии 10 сек сообщений отключается

p.s. код написан на коленке, скорее всего с ошибками, не безопасен, но работает очень шустро. По идее подобный код можно использовать для логирования событий, когда незначительную часть сообщений можно потерять.
p.p.s На деле довольно таки стабильно отсылал сообщения. В прод не рекомендовал бы...но в свое время не выложил текст.
49. o.nikolaev 194 18.11.19 22:20 Сейчас в теме
(47) У меня ситуация такая что есть уже готовый профессиональный и отлаженный блок на Java для взаимодействия с Kafka и встала задача дотянуться до него из 1С-ки. Будем пробовать окучить сие с помощью компоненты.
50. minimajack 60 29.11.19 14:50 Сейчас в теме
Исходники доступны всем желающим

https://github.com/MinimaJack/JVM-plugin
Labotamy; +1 Ответить
51. minimajack 60 03.12.19 16:30 Сейчас в теме
Существующий пример Kafka-получателя имел существенный недостаток.
При каждом получении данных происходило подключение и отключение к кафке, что вызывало дополнительные задержки связанные как с сетевым взаимодействием так и с ребалансировкой группы получателей.
Решение такое же простое как и с отправителем -> запускаем поток который будет закрывать получателя после продолжительного интервала.
Записал видео где два 1С клиента успешно общаются...
https://www.youtube.com/watch?v=jMl66aurQeI

Скорость конечно не супер, но 80001 сообщение со скоростью 2600 сообщений/сек доставлено(в видио есть вывод статистики по отправителю).

Проверил в асинхронном режиме...вполне себе удобно.
		оповещение = Новый ОписаниеОповещения("ЗавершитьПолучениеВсехДанных", ЭтотОбъект, "", "ЗавершитьПолучениеДанныхОшибка", ЭтотОбъект);
		ОбъектВК.НачатьВызовCallFInJVMPP(оповещение, "kafka.Consumer", 5, ПустаяСтрока(KafkaData), "");

Да, и теперь классы можно адекватно раскладывать по пакетам...kafka.Consumer, kafka.Producer, kafka.ProducerMetrics
o.nikolaev; +1 Ответить
52. o.nikolaev 194 06.12.19 06:12 Сейчас в теме
(51) А Kafka разве сама (сам) не отслеживает активность consumer-ов? Т.е. там если не хочешь влететь в ребалансировку надо непрерывно опрашивать. Ну дык на то она и "потоковая работа с данными" как я понимаю.
53. minimajack 60 06.12.19 09:42 Сейчас в теме
(52) JVM - живет столько сколько живет процесс rphost

Kafka выкинет только если heartbeat - перестанет поступать...а что ему не поступать если Consumer так и останется запущенным и будет отправлять heartbeat.

например:
у нас 2 rphost-а(2 сервера или 2 процесса):
на rphost#1 запустилось регламентное задание, запустился consumer#1, стал лидером - получил сообщения и ждет еще вызова из 1С...но в 1С регламентное задание завершилось. Неважно по какой причине...получены все сообщения или только определенный batch(1000 сообщений и хватит). JVM - продолжает работать, consumer#1 все так же сидит в лидерах и ждет от 1С приказов.

на rphost#2 запускается регламентное задание, запустился consumer#2 ( другой процесс, другая JVM) и ждет пока станет лидером...и тут вопрос в kafke - когда и вообще сделает ли она ребалансировку consumer-ов так, что бы consumer#2 стал лидером и начал получать сообщения для регламентного задания на rphost#2.


Решения два:
1. со стороны 1C - закрывать consumer при завершении регламентного задания.
минусы:
если регламентное задание отрабатывает маленькими пачками и часто, будут переподключения к кафке и создания новых consumer-ов
плюсы
железно подключаемся одним consumer-ом
2. со стороны java - закрывать consumer в другом потоке по истечении какого то интервала со времени последнего вызова.
минусы:
надо подбирать интервал согласно скорости обработки, если он будет меньше скорости обработки - consumer-ы переподключатся.
Например 1С обрабатывает пачку за 10 секунд - можно поставить интервал в java 15 секунд(с последнего вызова). Если 1С затупит - старый закроется , создастся новый Consumer - совершенно без дополнительных телодвижений.
плюсы
если регламентное задание запускается чаще интервала, consumer будет переиспользоваться.
54. kickout 8 10.12.19 09:04 Сейчас в теме
Скачал либы, начал тестить, и есть несколько моментов. (64 разрядка)
Небольшой итог по тому в чем удалось разобраться и чего тут не описано.
1) в классе в яве который подключаем должен быть публичный статик метод(функция) mainInt()
2) не удалось запустить не подписанный jar файл
3)при попытке передать параметры говорит что "много фактических параметров"
4) подписать jar файл пока не удалось

Что пробовал делать я
1) Создал хелоу ворлд свой на яве, вывел в отдельный класс, пишет что класс не найден.
2) с прилоденным архивом пока тоже не получилось пораьотать, выходит ошибка но уже говорит "mainInt" т.е. класс находит, наверно дело в подписи jar файла

Что делаю не так и какие еще есть нюансы использования dll?
Качал последний архив, самый свежий.
55. minimajack 60 10.12.19 10:51 Сейчас в теме
LaunchInJVM* - вызов процедур, первый параметр имя класса

LaunchInJVM - без параметров                   => void mainInt()                                =>  VK.LaunchInJVM   ( ИМЯ_КЛАССА)
LaunchInJVMP - процедура с одним параметром    => void mainInt(int param)                       =>  VK.LaunchInJVMP  ( ИМЯ_КЛАССА, Параметр1)
LaunchInJVMPP - процедура с 2-мя параметрами   => void mainInt(int param, int param2)           =>  VK.LaunchInJVMPP ( ИМЯ_КЛАССА, Параметр1, Параметр2)


CallFInJVM* - вызов функций, первый параметр имя класса, от типа последнего параметра зависит возвращаемое значение:
VK.CallFInJVM("JavaClass", 1) =>
public static int mainInt()    {
    }

VK.CallFInJVMP("JavaClass", 1, "") =>
public static String mainInt(int param)    {
    }

VK.CallFInJVMPP("JavaClass", 1,0.5, "") =>
public static String mainInt(int param, float param2)    {
    }

CallFInJVM    - функция без параметров         => int mainInt()                                 =>  VK.CallFInJVM      ( ИМЯ_КЛАССА, 1)
CallFInJVMP   - функция с одним параметров     => int mainInt(int param)                        =>  VK.CallFInJVMP     ( ИМЯ_КЛАССА, Параметр1, 1)
CallFInJVMPP  - функция с 2-мя параметрами     => int mainInt(int param,int param2)             =>  VK.CallFInJVMPP    ( ИМЯ_КЛАССА, Параметр1, Параметр2, 1)
CallFInJVMPPP - функция с 3-мя параметрами     => int mainInt(int param,int param2,int param3)  =>  VK.CallFInJVMPPP   ( ИМЯ_КЛАССА, Параметр1, Параметр2, Параметр3, 1)


ОбъектВК.CallFInJVMPP("CompareDouble",Строка1,Строка2,0.01)

	ОбъектВК = JVM_ПовтИсп.ВернутьКомпонентJava();
	ОбъектВК.libraryDir = "блабла"; // путь к Jar-ам по умолчанию d:/
	ОбъектВК.AddJar("Runner-0.0.1-SNAPSHOT.jar"); // используемый jar 


Код 1С:
ОбъектВК.LaunchInJVMP("factorial.Get", Число); 

Код Java:

public class Get
{

    private native void log( String info );

    public static void mainInt(int number)
    {

        Get r = new Get();
        r.log( new String( "Привет из джава! Object hash is " + r.hashCode() ) );

        BigInteger result = null;
        for ( int i = 0; i < 1; i++ )
        {
            result = BigInteger.valueOf( 1 );

            for ( long factor = 2; factor <= number; factor++ )
            {
                result = result.multiply( BigInteger.valueOf( factor ) );
            }
        }

        r.log(result.toString());
    }

}
Показать
Прикрепленные файлы:
native.zip
jvmcf.cf
Runner-0.0.1-SNAPSHOT.jar
56. kickout 8 10.12.19 11:10 Сейчас в теме
(55)
LaunchInJVMP

Во... чуть стало понятнее, как вызывать с параметрами и без, но у меня теперь вот такая штука выходит
Так я подключаюсь.
&НаКлиенте
Процедура test(Команда)
	имядлл = "C:\testNativeJVM\JVMLauncher64.dll";
	Если ПодключитьВнешнююКомпоненту(имядлл, "AddInNative",ТипВнешнейКомпоненты.Native ) Тогда
		Сообщить("Подключилась!");
		ОбъектJvm = Новый("AddIn.AddInNative.JVMLauncher");
		ОбъектJvm.javaHome = "C:\Program Files\Java\jdk1.8.0_162\";
		ОбъектJvm.libraryDir = "C:\testNativeJVM\";
		ОбъектJvm.AddJar("1cjvm.jar");
		ОбъектJvm.LaunchInJVMP("Testc",456);
	КонецЕсли
КонецПроцедуры
Показать

57. kickout 8 10.12.19 11:24 Сейчас в теме
(56)
Всё получилось, была путаница с методами, теперь вроде всё понял.
Будем дальше тестить и что то изобретать))))
Спасибо, за пояснения.
Было бы классно если бы в публикацию добавили про вызов процедур и функций явы через 1с, а то путаница идет.
И последний вопрос, как много можно передавать параметров?
Поддерживаются только примитивные типы? (про массив и структуры пока можно мечтать или даже мечтание не поможет?))))
58. minimajack 60 10.12.19 11:58 Сейчас в теме
(57)
В функцию можно до 4-х параметров, в процедуру можно до 2-х...
Возможно увеличить если будет необходимость
Ни массивы, ни структуры - сама 1С не даст отправить...точно работают строки, числа (int ,float, double)
Возможен только возврат массива байт в Бинарные данные:
CallFInJVMB  - byte[] mainInt()  
CallFInJVMBP - byte[] mainInt(param)  


Все остальное только через сериализацию ЗначениеВСтрокуВнутр...
59. kickout 8 10.12.19 12:14 Сейчас в теме
(58)
Дополню одной идеей, не знаю насколько это профитно,но...
Как мне кажется удобнее будет переделать вызов класса и метода примерно вот так (Runner.getAll, , )
т.е. пишется класс, а потом через точку метод который необходимо вызвать, чтобы не привязываться исключительно к mainInt
ну или как то по другому реализовать, но суть в том чтобы можно было явно указать метод который необходимо выполнить, ну и через запятую параметры для метода.
вдруг в классе будет 2 и более метода которые можно выполнить, а то получается одна точка входа, а тут уже появляется выбор...
да и городить тогда классы под каждый метод не надо будет.
60. minimajack 60 10.12.19 13:08 Сейчас в теме
(59) идея нормальная...
Возможно реализовать альтернативным апи: ClassFunctionCall, ClassFunctionCallP,ClassFunctionCallPP
По сути надо стандартизировать апи, а то сейчас есть разброс в именовании...

Проще отправлять прямиком предложения в репо: https://github.com/MinimaJack/JVM-plugin/issues
61. minimajack 60 11.12.19 16:54 Сейчас в теме
(59) Добавлено
Вызовы эквивалентны
		ОбъектВК.CallFInJVM("time.utils.Current", '00010101'));
		ОбъектВК.ClassFunctionCall("time.utils.Current.mainInt", '00010101'));


time.utils - package
Current - class
mainInt - имя метода

Тип Даты работает и в параметрах и в возвращаемом результате, с учетом адекватности на вхождение в unixtime интервал.
Прикрепленные файлы:
native.zip
62. kickout 8 12.12.19 10:02 Сейчас в теме
(61)
Огонь,а есть аналогичное для процедуры?
Оставьте свое сообщение

См. также

Вставка картинки из буфера обмена (JavaScript + внешняя компонента) 5

Инструменты и обработки Программист Конфигурация (md, cf) v8 Абонемент ($m) Разработка внешних компонент

Вставка картинки из буфера обмена с помощью JavaScript в поле HTML в web-клиенте и с помощью внешней компоненты в тонком/толстом клиенте. Механизм протестирован на платформах 8.2 и 8.3 Для запуска опубликованной конфигурации требуется платформа релиза не ниже 8.3.14.

1 стартмани

05.12.2019    379    Andreyyy    1       

С 2020 года сервис «Продление поддержки конфигурации 1С:УПП» подорожает вдвое Промо

Успейте продлить поддержку УПП до повышения цен! Фирма «1С» предупредила об изменении цен на сервис «Продление поддержки конфигурации "1С:Управление производственным предприятием"». С 1 января 2020 года сервис подорожает в два раза.

Клиент событий в «бесконечном» HTTP-соединении для 1С: Предприятие 8 5

Инструменты и обработки Системный администратор Программист Архив с данными v8 1cv8.cf Windows Абонемент ($m) Разработка внешних компонент

Native Компонента в отдельном потоке обрабатывает пакеты событий, в "бесконечном" http соединении и передаёт данные в очередь внешних событий.

10 стартмани

02.12.2019    584    starovton    2       

Управление окнами и мониторами в 1С 7

Инструменты и обработки Системный администратор Программист Архив с данными v8 1cv8.cf 1С:Франчайзи, автоматизация бизнеса Windows Абонемент ($m) Сервисные утилиты Разработка внешних компонент

Управление размерами, активностью и положением окон из 1С с возможностью вывода окон на второй монитор и запретом изменения окна.

1 стартмани

28.10.2019    2646    2    Grigoriy251    2       

Перенос данных КА 1.1 => ERP 2 (ЕРП) (обработка переноса документов, остатков и справочной информации из "1С:Комплексная автоматизация, ред. 1.1" в "1С:ERP Управление предприятием, ред 2"). Обновлен до КА 1.1.115.х и ERP 2.4.10.х Промо

Обработка позволяет переносить из КА 1.1 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления в случае выхода новых релизов конфигураций 1С.

29700 руб.

Маленькая и скромная мобильная внешняя компонента 46

Вопрос Программист Архив с данными v8 Абонемент ($m) Разработка внешних компонент

Изваять простенькую мобильную компоненту на 1С для android не так-то просто. Посему назло отдельным супостатам, не желающим делится исходниками, представляю весь свой скромный труд на публичный суд.

1 стартмани

21.10.2019    3868    1    ripreal1    12       

Native внешняя компонента для оповещения по UDP или TCP 36

Инструменты и обработки Программист Архив с данными v8 Windows Абонемент ($m) Разработка внешних компонент

Native внешняя компонента для оповещения по UDP или TCP, которая реализует возможность в 1С передавать сообщения с сервера на клиента. Исходный код компоненты также представлен.

1 стартмани

06.10.2019    3304    7    vdv2701    10       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Внешняя компонента для работы с драйвером "Атол v.10". 1С:8.3 5

Инструменты и обработки Программист Архив с данными v8 Windows Кассовые операции Абонемент ($m) Разработка внешних компонент

Внешняя компонента, для работы с драйвером «Атол v.10», посредством JSON-заданий.

1 стартмани

16.07.2019    3022    4    gortrex    0       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Менеджер буфера обмена. Нативная внешняя компонента win 32/64 7

Инструменты и обработки Программист Расширение (cfe) v8 1cv8.cf Windows Абонемент ($m) Разработка внешних компонент

Добавляет возможности получения информации из почтовых вложений или файлов с других рабочих столов (RDP) с помощью операций копирования/вставки. Может «прослушивать»: любые изменения буфера обмена; нажатие клавиш соответствующих вставке (paste); нажатие клавиш копирования (copy); drop операции. Это новая реализация аналогичной компоненты https://infostart.ru/public/379695/, но теперь не C#, а С++ нативно для x32 / x64. (см. http://youtu.be/-PaWWFfbYo4)

1 стартмани

26.06.2019    1989    4    Bww    6       

Обработка вывода на печать QR-кода и штрихкодов в различных форматах (одномерные и двумерные) 9

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Россия Абонемент ($m) Разработка внешних компонент Ценники

Обработка предназначена для вывода на печать QR-кода и штрихкодов в различных форматах без установки дополнительных ActiveX компонент. Тестировалась на чистой базе платформы 1С:Предприятие 8.3 (8.3.14.1630), а так же в конфигурациях Бухгалтерия предприятия КОРП, редакция (3.0.69.35) и на Бухгалтерия предприятия (3.0.70.30)

2 стартмани

22.05.2019    3206    14    MGemini    2       

Очный семинар по регулярному менеджменту Александра Фридмана "Вы или Хаос", 12 декабря 2019 г. , Санкт-Петербург Промо

Семинар по регулярному менеджменту от Александра Фридмана для собственников, первых лиц и топов. Технология управленческого планирования, комплексного управления временем и другими ресурсами, выполнением поручений, делами, информацией, контактами (встречи-звонки-почта).

от 11000 до 29000 рублей

DLL для подключения к Asterisk (32/64 клиенты) 6

Инструменты и обработки Системный администратор Программист Архив с данными v8 1cv8.cf Windows Абонемент ($m) Разработка внешних компонент Телефония, SIP

Подключение к Астериску и получение событий "Newchannel","BridgeEnter","Hangup" через ОбработкаВнешнегоСобытия.

1 стартмани

19.03.2019    3201    3    xxxAndricxxx    9       

DLL для обмена между 1С (и не только) через UDP порты (32/64 клиенты) 14

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Россия Windows Абонемент ($m) Разработка внешних компонент

Библиотеки для создания функционала для прослушивания портов из 1С и отправки сообщений на удаленный udp порт.

1 стартмани

28.02.2019    2844    6    xxxAndricxxx    1       

1C:Предприятие для программистов: Запросы и отчеты. Второй поток. Онлайн-интенсив с 17 марта по 16 апреля 2020 г. Промо

Данный онлайн-курс предусматривает углубленное изучение языка запросов и возможностей системы компоновки данных, которые понадобятся при разработке отчетов, работающих на платформе “1С:Предприятие” в рамках различных прикладных решений. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей различных прикладных решений, которые используют в своей работе отчеты разного назначения.

6500 рублей

Внешняя компонента для ping (под win) 5

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Разработка внешних компонент

Цель: выполнение ping из 1С без использования команд системы. Может быть полезна разработчикам для проверки доступности компьютеров.

1 стартмани

05.01.2019    2605    2    milut    0       

Эмулятор ККМ по стандарту ФФД 1.1 21

Инструменты и обработки Программист Архив с данными v8 Розница УТ11 Россия Windows Кассовые операции Абонемент ($m) Разработка внешних компонент ККМ

Эмулятор драйвера ККМ по стандарту ФФД 1.1 предназначен для использования всех возможностей программы, при отсутствии физической кассы. Подойдет как программистам при разработке интерфейса РМК, например, так и пользователям для тестирования возможностей программы.

1 стартмани

30.12.2018    11137    81    Matveymc    19       

Перенос данных КА 1.1 / УПП 1.3 => БП 3.0 (перенос остатков, документов и справочников из "1С:Комплексная автоматизация 1.1" / УПП 1.3 в "1С:Бухгалтерия 3.0"). Обновлен до версий КА 1.1.115.х, УПП 1.3.127.х! Промо

Разработка позволяет перенести остатки по всем счетам бух.учета в программу "1С:Бухгалтерия предприятия 8", ред. 3.0 на выбранную дату начала ведения учета. Также переносятся документы за период и вся необходимая справочная информация. Правила оперативно обновляю при выходе новых релизов. Рассылка обновлений правил бесплатно в течение 12 месяцев. Есть видеодемонстрация проведения переноса данных. Конфигурации при использовании обмена остаются полностью типовыми. Перенос данных возможен в Бухгалтерию 3.0 версии ПРОФ, КОРП или базовую.

24700 руб.

WebSocket Клиент / Сервер. Внешний компонент 20

Инструменты и обработки Системный администратор Программист Компонента, плагин (dll, vbs,..) v8 1cv8.cf Абонемент ($m) Разработка внешних компонент

Реализация протокола WebSocket. Клиентская часть для взаимодействия с внешними сервисами. Серверная часть для организации собственного сервера, принимающего клиентские соединения в многопоточном режиме. Возможно взаимодействие RabbitMQ Slack Asterisk и другие

1 стартмани

16.11.2018    6505    36    nomadon    27       

Внешняя компонента для выполнения регулярных выражений 58

Инструменты и обработки Программист Архив с данными v8 Абонемент ($m) Разработка внешних компонент

Внешняя Native API компонента для выполнения регулярных выражений на платформе 1С:Предприятие 8. Написана на C++. Используется движок boost::regex (v 1.69, v 1.68 - для Android). Версия синтаксиса Perl Compatible Regular Expressions.

1 стартмани

12.11.2018    6981    22    KAV2    57       

Перенос данных БП 3.0 => УТ 11 / КА 2 / ERP 2 (ЕРП) (перенос остатков, документов и справочной информации из "1С:Бухгалтерия предприятия 8", ред.3.0). Обновлено до БП 3.0.73.х, УТ 11.4.10.х, КА 2.4.10.х., ERP 2.4.10.х! Промо

Переносятся документы за выбранный период, справочная информация и остатки по счетам бух. учета в программу УТ 11 / КА 2 / ЕРП 2 (ERP). Переносятся все возможные виды операций ввода остатков на нужную дату. Есть отбор по периоду переноса документов и фильтр по организации, доступен выбор даты ввода остатков. Если нужно переносить что-то дополнительно, то обычно бесплатно добавляем это в перенос . Смотрите видеодемонстрацию со звуком - советами по переносу и рекомендациями настройки программ.

29700 руб.

Native компонента для 8.3, реализующая метод sleep() 6

Инструменты и обработки Программист Архив с данными v8 Россия Windows Абонемент ($m) Разработка внешних компонент

Внешняя Native 64-битная компонента для 1C 8.3, которая реализует метод sleep() - паузу выполнения кода. Пауза для большой устойчивости сделана платформозависимой и требует WinAPI. Ид компоненты - AddIn.AddInNativeSleep.NativeSleep.

1 стартмани

16.10.2018    3849    2    ripreal1    9       

TextRadar - нечеткий поиск в тексте 10

Инструменты и обработки Программист Компонента, плагин (dll, vbs,..) v8 1cv8.cf Абонемент ($m) Разработка внешних компонент

В отличие от нечеткого сравнения строк, когда обе сравниваемых строки равнозначны, в задаче нечеткого поиска выделяются строка поиска и строка данных, а вычислить необходимо не степень похожести двух строк, а степень присутствия строки поиска в строке данных. Нормированный коэффициент, находящийся между 0 и 1 позволяет отсечь заведомо низкие результаты, организовать поиск по синонимам и т.д. Наглядное отображение результатов в кратком и детальном виде поможет быстро найти интересующий фрагмент.

5 стартмани

19.09.2018    8583    15    TSSV    14       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Класс-обработка “Работа с картами Яндекс” 60

Инструменты и обработки Программист Конфигурация (md, cf) v8 Абонемент ($m) Разработка внешних компонент WEB

Как показать точку или маршрут на карте Яндекс. Как получить координаты по строке адреса (геокодирование).

1 стартмани

01.08.2018    13006    141    RSConsulting    13       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Распознавание лиц (off-line). Демонстрационная база. 101

Инструменты и обработки Системный администратор Пользователь Руководитель проекта Архив с данными v8 Абонемент ($m) Разработка внешних компонент

Распознавание лиц входит в нашу жизнь стремительными темпами, бизнес стремится за событиями. В публикации находится описание и пример использования нейросетей для распознавания лиц.

1 стартмани

17.07.2018    11369    74    nomadon    45       

QR-code полная версия (без шрифта и внешней компоненты для 8.2, 8.3 и любого типа клиента) 11

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Абонемент ($m) Разработка внешних компонент Сканер штрих-кода

Предназначена для создания QR-code с указанием процента восстановления потерянных данных. Строка кодирования может содержать все печатаемые символы, в том числе и кириллические. Для работы не требуется внешняя компонента или шрифт.

2 стартмани

10.07.2018    7317    13    bobank    6       

Перенос документов, остатков и справочников КА 1.1 => КА 2 / УТ 11. Обновлено до КА 2.4.10.х и УТ 11.4.10.х! Промо

Более 130 компаний выполнили переход на КА 2 или УТ 11 с помощью нашей разработки! Позволяет перенести не только остатки и справочники (как типовая обработка), но и документы за нужный период времени. Предоставляем техподдержку, оперативно исправляем замечания, выпускаем обновления при выходе новых релизов программ 1С. Вы можете проверить разработку до покупки: сделаем бесплатный тестовый перенос из вашей базы КА 1.1 и предоставим доступ к базе-результату через веб-клиент!

29700 руб.

Внешняя компонента для ping'а 18

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Разработка внешних компонент

Внешняя компонента для выполнения ping'а из 1С:Предприятия 8.

1 стартмани

04.07.2018    6972    5    frkbvfnjh    24       

Вызов методов 1С из внешней компоненты, выполненной по технологии COM на C++ 7

Инструменты и обработки Программист Архив с данными v8 Windows Абонемент ($m) Разработка внешних компонент

Пример работы с объектами и методами 1С из внешней компоненты, разработанной по технологии COM на С++.

1 стартмани

04.06.2018    5767    4    le_    0       

Перенос данных БП 2.0 => УТ 11 / КА 2 / ERP 2 (перенос остатков, документов и справочников из "1С:Бухгалтерия предприятия 8", ред. 2.0 в "1С:Управление торговлей 8", ред.11 / КА 2 / ERP 2). Обновлено до УТ 11.4.10.х, КА 2.4.10.х, ERP 2.4.10.х! Промо

Перенос позволяет загрузить в УТ 11 / КА 2 / ERP 2 документы за выбранный период, справочную информацию и остатки по счетам бух. учета. Переносятся остатки денежных средств, взаиморасчетов, остатки товаров и материалов на складах. Переносятся девятнадцать основных видов документов за выбранный период и вся нормативно-справочная информация. Есть фильтр по организации. Если нужно переносить что-то дополнительно, то обычно бесплатно дорабатываю правила (перед покупкой согласуйте необходимые доработки).

29700 руб.

Tool1CD Beta в деле 99

Инструменты и обработки Программист Компонента, плагин (dll, vbs,..) v8 Абонемент ($m) Разработка внешних компонент

Пс, парень! Не хочешь немного сырых байтов?

1 стартмани

09.05.2018    18616    29    baton_pk    26