|
|
|
Проблема с загрузкой 2х DLL использующих 2 ВиртДжаваМашины. Кто нибуюдь в курсе ?
|
|||
|---|---|---|---|
|
#18+
Привет. Сразу уточню: - я Delphi программист. С Джавой не работаю вообще никак. - Суть проблемы подробно пока сам не знаю ! Она возникла пару часов назад, и мне о ней рассказал наш менеджер, контактирующий с заказчиком. Описываю проблему со слов нашего заказчика, описавшем все в телефонном разговоре - он должен выслать какое то подробное описание в ближайшее время. Задам вопрос на удачу, может решение простое и все о нем знают :) Суть проблемы такая (записано со слов позвонившего заказчика) У заказчика есть Delphi программа DelphiProg Также заказчика есть некий софт "JavaProg1" , написанный на Java. Разработчики этого "JavaProg1" предоставили DLL-прослойку JavaProxy1 (не знаю на каком она языке написана), для обращения к этому софту из любых языков. Обыкновенная DLLка. Мы написали модуль DelphiProxy1 (pas файл, с исходным кодом) на Delphi, который обращается к этой DLL-Прослойке JavaProxy1. DelphiProg -> DelphiProxy1 -> JavaProxy1 -> JavaProg1 Уже почти месяц заказчик тестирует эту нашу DelphiProxy1. Сейчас ВНЕЗАПНО у заказчика обнаружилось, что его Delphi программа DelphiProg использует еще какую-то "JavaProg2" но через COM. DelphiProg -> через COM ->JavaProg2 (возможно там есть какие то прослойки, о которых заказчик не уточнил в телефонном разговоре) Судя по всему COM объект тоже в DLLке реализован. Или я ошибаюсь. Сам баг Сама проблема проявляется, если DelphiProg заказчика начинает работать с обеими программами (JavaProg1 и JavaProg2) - и на словах она звучит как "в одном адресном пространстве не могут крутится две виртуальные Джава Машины". Вот еще некий поток речи с описанием ошибки, записанный с телефонного разговора " Обе библиотеки не могут делить JVM, если в момент инициализации передаются критические параметры, как, например, локализация источников (ресурсов). Здесь возможна неоднозначность при объединении ресурсов нескольких приложений. " Еще заказчик утверждает, что если переписать библиотеку в виде отдельного процесса, то проблема уйдет. Мол мы в своем процессе будем загружать одну ДжаваМашину, а другая либа будет грузить другую ДжаваМашину. Плохо лишь, что времени крайне мало, чтобы сейчас все переписывать в отдельном процессе. Кто нибудь знает об этой проблеме ? Как заставить DLLки не загружать две JVM, а использовать одну общую ? Вариант "послать заказчика лесом" не прокатит. Его проблемы, это и наши проблемы :) Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2013, 23:15:14 |
|
||
|
Проблема с загрузкой 2х DLL использующих 2 ВиртДжаваМашины. Кто нибуюдь в курсе ?
|
|||
|---|---|---|---|
|
#18+
Никто не сталкивался с такой проблемой ? Что если обращаться из одного приложения к двум Джава программам, то идет попытка загрузки двух экземпляров ДжаваВртМашины и это приводит к ошибке ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2013, 14:13:28 |
|
||
|
Проблема с загрузкой 2х DLL использующих 2 ВиртДжаваМашины. Кто нибуюдь в курсе ?
|
|||
|---|---|---|---|
|
#18+
У вас есть некий нативный код, который приводит к некой ошибке. При этом совершенно не понятно как именно этот код испольузет JVM. Проблема не в JVM, а в коде, который её использует. Не понятно ни как COM обращается к JVM, ни как это делают остальные ваши DLL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2013, 14:16:27 |
|
||
|
Проблема с загрузкой 2х DLL использующих 2 ВиртДжаваМашины. Кто нибуюдь в курсе ?
|
|||
|---|---|---|---|
|
#18+
Понятно. Все осложняется тем, что действительно я и сам понятия не имею как идет работы с Джавой в этих двух программах. Т.к. мы используем официальную прослойку от разработчиков софтины. Про вторую прогу вообще информации почти 0 (только то, что она вроде бы через COM общается с Джавой). Я надеялся, что эта проблема с загрузкой двух копий виртуальной машины в одно адресное пространство, это какая то достаточно известная баго-фича. Мол уж наверняка много кто был вынужден обращаться из своих программ в ДВЕ и более Джава программы, и наверное сталкивались с стакой заметной баго-фичей, а соответственно знают о ее решении. У меня вообще были изначально сильные сомнения что такая бага может существовать. Не верится, что в эволюционирующей много лет Джаве могут быть такие глупые детские ограничения. Наверное дело в программах. Будем разбираться пока. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2013, 14:50:00 |
|
||
|
Проблема с загрузкой 2х DLL использующих 2 ВиртДжаваМашины. Кто нибуюдь в курсе ?
|
|||
|---|---|---|---|
|
#18+
Использовать Java из нативного кода можно разными способами. Единстыенный стандартный это JNI, который подымает JVM в вашем процессе. Никакого станадартного решения для обращения к JVM через COM нет. Создают ли ваши прокси JVM - не понятно. Если оба способа создают JVM в одном и том же процессе, то их стоит переписать так чтобы они умели обнаруживать уже существующую JVM. http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2013, 15:15:56 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38454817&tid=2128263]: |
0ms |
get settings: |
7ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 310ms |

| 0 / 0 |
