Текущее время: Вс, май 11 2025, 22:33

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ! Прежде чем задавать вопрос, ознакомьтесь со ссылками ниже:

Вопросы по отличиям версий SAP, Add-On, EHP - сюда
Вопросы по SAP Front End (SAPlogon, SAPgui, guiXT и т.д.) - сюда
Вопросы по LSMW - сюда
Вопросы по архивации в SAP - сюда
Вопросы по SAP GRC - сюда
Вопросы по SAP Business Workplace (почте SAP) и SAP Office - сюда
Вопросы по miniSAP (SAP mini basis) - сюда
Вопросы по SAP HANA - сюда
Вопросы по лицензированию продуктов SAP - сюда



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Вызов SAP Java Connector напрямую из Oracle
СообщениеДобавлено: Чт, сен 23 2010, 13:42 
Начинающий
Начинающий

Зарегистрирован:
Чт, сен 23 2010, 12:25
Сообщения: 2
Добрый день!
Есть задача вызывать функцию BAPI напрямую из хранимой процедуры Oracle, используя для этого SAP Java Connector (sapjco3.jar).
Можно ли это сделать вообще и, если да, то как заставить sapjco работать под Oracle?

При попытке загрузить классы из sapjco3.jar в Oracle обычным способом через loadjava ("D:\oracle11\HOME\BIN\loadjava.bat -user system/1@ORCL -oci8 -verbose -force -resolve C:\sapjco3\sapjco3.jar"), большинство из них оказываются инвалидными (т.к. имеют ссылки на отсутствующие классы). Однако, использование ключа "-genmissingjar mis.jar" позволяет сгенерировать затычки для отсутствующих классов и благополучно загрузить и скомпилировать sapjco3.jar в Oracle.
Однако, при выполнении строки "JCoDestination destination = JCoDestinationManager.getDestination(ABAP_AS);" из стандартного примера "C:\sapjco3\examples\StepByStepClient.java" возникает исключение "Exception in thread "Root Thread" java.lang.ExceptionInInitializerError: Error getting the version of the native layer: java.lang.ExceptionInInitializerError".
Это грустно, но решаемо: декомпилируем sapjco3.jar\com\sap\conn\rfc\api\RfcApi.class и в функции "RfcGetVersion()" заменяем "return runtime.getVersion();" на "return "711.34"", после чего она возвращает то, что и должна.
Но дальше при взове методов у destination (например, "destination.getRepository()") утыкаемся в ошибку "Exception in thread "Root Thread" java.lang.NoClassDefFoundError" на строке "driver = new RfcTypeDirectCpic(currentControl);" в методе createChannel класса DefaultRfcRuntime. При этом все классы благополучно компилируются, а ошибка возникает только при запуске.
Подозреваю, что это не последняя проблема. Может, кто-то всё же запускал sapjco3 из-под Oracle? Помогите, пожалуйста, его победить.
Oracle 11g на Windows Server 2003.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вызов SAP Java Connector напрямую из Oracle
СообщениеДобавлено: Пн, сен 27 2010, 08:04 
Менеджер
Менеджер

Зарегистрирован:
Вт, июл 24 2007, 14:52
Сообщения: 603
Откуда: Казахстан
Пол: Мужской
можно вызвать из оракла sapevt, который инициирует событие в сапе
если на одном хосте конечно


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов SAP Java Connector напрямую из Oracle
СообщениеДобавлено: Чт, сен 30 2010, 08:23 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 23 2004, 10:40
Сообщения: 459
Я в этом не специалист, но JCo помимо jar в своем составе еще имеет librfc32.dll, которую нужно положить куда надо (windir\syswow64 и/или system32) и зарегистрировать, может понадобиться ее юникодная версия, ну и туда же еще sapjco3.dll...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов SAP Java Connector напрямую из Oracle
СообщениеДобавлено: Пт, окт 01 2010, 09:18 
Специалист
Специалист

Зарегистрирован:
Вс, мар 13 2005, 13:59
Сообщения: 201
Откуда: Moscau
тоже давно имел с этим дело, так что деталей не помню. была проблема, что для вызова натив кода (в лице librfc32.dll), надо какие-то супер полномочия, которые есть у 1 пользователя и другим их так просто не дать.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов SAP Java Connector напрямую из Oracle
СообщениеДобавлено: Ср, окт 13 2010, 14:45 
Начинающий
Начинающий

Зарегистрирован:
Чт, сен 23 2010, 12:25
Сообщения: 2
Всем спасибо, всё заработало.
Библиотеки librfc32.dll в составе имеющегося у меня дистрибутива sapjco3 нет, да она там и не нужна.
Библиотеку sapjco3.dll действительно нужно положить в один из каталогов, перечисленных в java.library.path (например, в C:\WINDOWS\system32 или в d:\oracle11\home\bin).
"Супер полномочия" для вызова натив кода (sapjco3.dll) даются вызовом dbms_java.grant_permission('SYSTEM','SYS:java.lang.RuntimePermission', 'loadLibrary.sapjco3', '').
Ещё может пригодиться dbms_java.grant_permission('SYSTEM','SYS:java.io.FilePermission', '<<ALL FILES>>', 'read,write').
Подробнее о вызове натив кода можно посмотреть на http://timurakhmadeev.wordpress.com/2009/12/14/jni-in-oracle/, за что Тимуру отдельное спасибо.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB