|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
Здравствуйте. Помогите решить проблему. Есть сторонний .jar файл. Библиотека для кодировки изображений в WebP. Я загружаю ее с помощью DBMS_JAVA.loadjava. Классы из библиотки появляются в all_objects, не инвалидные. Написаный java-класс, который без ошибок выполняется из PLSQL. Но, как только этот класс использует классы из библиотки, вызывается исключение: ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError Что может быть не так? Ссылка на файл https://ru.files.fm/u/8s87twq8 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 16:56 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
Далеко не всем захочется пробовать на своей базе, писать обертку и т.д. Поэтому вместо отсебятины Я загружаю ее с помощью DBMS_JAVA.loadjava лучше приводить полный листинг. Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165.
И неплохо было бы сказать: пробовал из найденного то-то и то-то, с таким-то результатом. С jar+dll/so не работал, только с jar. Могу предположить права доступа к библиотеке, как на уровне ОС, так и в СУБД (dbms_java.grant_permission). И в alert.log неплохо глянуть. И стек ошибки полностью, впрочем это к первому вопросу о полном листинге. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 18:38 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
dmdmdm, Листинг прост exec DBMS_JAVA.loadjava(options => '...\WebP\webp-imageio-0.1.6.jar'); Какие другие опции указать, честно говоря, не знаю. Дополнительно даны Permissions GRANT USER_LEVEL_1 SYS java.io.FilePermission * read ENABLED 169 GRANT USER_LEVEL_1 SYS java.io.FilePermission <<ALL FILES>> read, write,execute ENABLED 170 GRANT USER_LEVEL_1 SYS java.lang.RuntimePermission getClassLoader ENABLED 163 GRANT USER_LEVEL_1 SYS java.util.PropertyPermission * read,write ENABLED 161 Я не знаю, что еще можно дать. Скажите, действие exec DBMS_JAVA.loadjava(options => '...\WebP\webp-imageio-0.1.6.jar'); нужно выполнять для каждого сеанса, или достаточно один раз загрузить библиотеку в БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2020, 13:17 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
dmdmdm, И,еще: при первой,в сессии, попытки исполнения кода, вызывается ошибка ORA-29532: Java call terminated by uncaught Java exception: java.lang.ExceptionInInitializerError ORA-06512: at "USER1.PKG", line 400 ORA-06512: at "USER1.T_RAW_BEFORE", line 28 ORA-04088: error during execution of trigger 'USER1.T_RAW_BEFORE' ORA-06512: at line 15 А, уже в последующих ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError ORA-06512: at "USER1.PKG", line 400 ORA-06512: at "USER1.T_RAW_BEFORE", line 28 ORA-04088: error during execution of trigger 'USER1.T_RAW_BEFORE' ORA-06512: at line 15 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2020, 13:31 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
Под правами SYSDBA то же самое ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2020, 15:56 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
LemkolegORA-29532: Java call terminated by uncaught Java exception: java.lang.ExceptionInInitializerError Вот это и есть первичная ошибка с которой надо разбираться. Всё остальное - снежный ком. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2020, 16:13 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Что можно с этим сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2020, 16:22 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
LemkolegЧто можно с этим сделать? Посмотреть какая именно ошибка выкинулась при инициализации. Ну и, как уже сказали выше, загуглить. Может, используемая библиотека не может работать без экрана... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2020, 16:48 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
exec DBMS_JAVA.loadjava(options => '...\WebP\webp-imageio-0.1.6.jar'); Какие другие опции указать, честно говоря, не знаю. С помощью командной строки, я показал. Может, и через DBMS_JAVA так же сработает. Лучше всегда обращаться к доке . Скажите, действие exec DBMS_JAVA.loadjava(options => '...\WebP\webp-imageio-0.1.6.jar'); нужно выполнять для каждого сеанса, или достаточно один раз загрузить библиотеку в БД? Один раз. Я не знаю, что еще можно дать Нужно давать не наугад все права, это небезопасно, да и метод "пальцем в небо". А только те, которые нужны . Которые нужны, определяет библиотека - она может соединяться по сети, может читать/писать файлы, и т.д. ORA-29532: Java call terminated by uncaught Java exception: java.lang.ExceptionInInitializerError Java-проблемы лучше тестировать вне оракла в какой-нибудь IDE. Проблемы связки java и PL/SQL тестируйте внутри оракла, понимая, что есть Java-стек и PL/SQL-стек . Если захотите вывести Java-стек в PL/SQL, помните о перенаправлении вывода . ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 19:10 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
dmdmdm, Эта библиотека работает, вне оракла, хорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 23:59 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
dmdmdm, Значит, ошибка в доступе Caused by: java.security.AccessControlException: the Permission ("java.lang.RuntimePermission" "loadLibrary.C:\Users\ORACLE~1\AppData\Local\Temp\6655369759961346317webp-imageio.dll") has not been granted to USER_LEVEL_1. The PL/SQL to grant this is dbms_java.grant_permission( 'USER_LEVEL_1', 'SYS:java.lang.RuntimePermission', 'loadLibrary.C:\Users\ORACLE~1\AppData\Local\Temp\6655369759961346317webp-imageio.dll', '' ) При попытке выполнить рекомендуемый код dbms_java.grant_permission( 'USER_LEVEL_1', 'SYS:java.lang.RuntimePermission', 'loadLibrary.C:\Users\ORACLE~1\AppData\Local\Temp\6655369759961346317webp-imageio.dll', '' ) выдается следующее исключение ORA-29532: Java call terminated by uncaught Java exception: java.lang.SecurityException: policy table update SYS:java.lang.RuntimePermission, loadLibrary.C:\Users\ORACLE_USER\AppData\Local\Temp\*.dll Есть еще одна проблема: оракл вгружает библиотеку webp-imageio.dll каждый раз добавляя к ней прификс (19-ти значное число), что приводит к дупликатам выгруженых библиотек. Можно ли это исправить? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2020, 17:58 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
1. В стопятьдесятчетвертый раз. Если вы обращаетесь на форум, коллегам для полноценного тестирования нужен полный листинг, включая: версии ПО, полностью код, ошибки. Мне, чтобы вам помочь, нужно установить Оракл нужной версии, загрузить библиотеку, написать PL/SQL обвязку, вызвать ее. Т.е. потратить, возможно, не один час. 2. Обратите внимание, что при моем способе загрузки сразу выдаются разрешения. Код: powershell 1.
3. оракл вгружает библиотеку webp-imageio.dll каждый раз Зачем "каждый раз" ? Загрузка библиотеки в СУБД нужна один раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 07:32 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
dmdmdm, Там опечатка. Выгружает. Во временную папку C:\Users\ORACLE~1\AppData\Local\Temp\6655369759961346317webp-imageio.dll. При чем добавляя префикс к имени. В даном случаи 6655369759961346317. По версиям: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Windows 10 Pro. Java класс прикрепляю. Вызов класса происходит слудующим образом: PROCEDURE CUT_IMAGE(P_DATA in out nocopy BLOB, P_IMAGE_SIZE in NUMBER, IS_ROUND in NUMBER, P_SMALL_IMAGE in out nocopy BLOB) as language java name 'AvatarsComplite.getImmageAvatar( oracle.sql.BLOB[], java.lang.Integer, java.lang.Integer, oracle.sql.BLOB[])'; Полный листинг ошибки: *** 2020-08-10T12:54:47.588336+03:00 Exception in thread "Root Thread" java.lang.ExceptionInInitializerError at com.luciad.imageio.webp.WebPDecoderOptions.<clinit>(WebPDecoderOptions.java:20) at com.luciad.imageio.webp.WebPReadParam.<init>(WebPReadParam.java:24) at AvatarsComplite.decodeFromWebPtoJPG(AVATARSCOMPLITE:219) at AvatarsComplite.getImmageAvatar(AVATARSCOMPLITE:47) Caused by: java.security.AccessControlException: the Permission ("java.lang.RuntimePermission" "loadLibrary.C:\Users\ORACLE~1\AppData\Local\Temp\6263584239715113428webp-imageio.dll") has not been granted to USER_LEVEL_1. The PL/SQL to grant this is dbms_java.grant_permission( 'USER_LEVEL_1', 'SYS:java.lang.RuntimePermission', 'loadLibrary.C:\Users\ORACLE~1\AppData\Local\Temp\6263584239715113428webp-imageio.dll', '' ) at java.security.AccessControlContext.checkPermission(AccessControlContext.java) at java.security.AccessController.checkPermission(AccessController.java) at java.lang.SecurityManager.checkPermission(SecurityManager.java) at oracle.aurora.rdbms.SecurityManagerImpl.checkPermission(SecurityManagerImpl.java) at java.lang.SecurityManager.checkLink(SecurityManager.java:837) at java.lang.Runtime.load0(Runtime.java:803) at java.lang.System.load(System.java:1186) at com.luciad.imageio.webp.NativeLibraryUtils.loadFromJar(WebP.java:131) at com.luciad.imageio.webp.WebP.loadNativeLibrary(WebP.java:31) at com.luciad.imageio.webp.WebP.<clinit>(WebP.java:38) ... 4 more ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 13:01 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
Пока остановился на том, что протестировать вызов библиотеки не могу. Код: powershell 1. 2. 3.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 08:21 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
dmdmdm, Вы сделали входную точку. Я же использовал статистические методы ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:03 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
Входная точка main ничем принципиально не отличается от любой другой функции/метода любого другого класса, будь он статическим или нет. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Итак, у нас есть библиотека, и пробный вызов ее метода. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Видно, что не хватает разрешений. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
И вперед, разбираться в библиотеке дальше. Тут поможет Java decompiler . Код: java 1. 2. 3. 4. 5. 6. 7.
Проблема происходит при загрузке native library. Все можно раскопать, вопрос только в усердии. Засим откланиваюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 15:59 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
dmdmdm, Спасибо большое за старание. Уверен, что проблема не в библиотеке: на java проекте работает без проблем. Думаю, декомпилировать и копаться в коде - будет лишнее. Может кто, еще , увидя тему, подскажет что-нибудь ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 12:44 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
dmdmdm, Есть предположение: так, как я говорил, при выполнении кода, выгружется файл (нативная библиотека dll) в папку временных файлов оракл. И, при выгрузке добавляется префикс к имени файла. Возможно по-этому нативная быблиотека не инициализируется. Как можно получить доступ к папке , с временными файлами, оракл из JVM Aurora? Не забивая путь статистически. Тогда можно было переименовать файл в оригинальное имя. Либо, как-то запретить добавления префикса к имени ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 13:38 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
Lemkoleg Уверен, что проблема не в библиотеке Вашу уверенность разделяю наполовину. Есть разница между standalone JVM и Oracle JVM. Отсюда пляски с обертками и разрешениями. И вполне допускаю, что есть код, который проблематично в виде бинарника интегрировать в Oracle. Lemkoleg на java проекте работает без проблем. Это подсказка вам: вовсе необязательно засовывать логику проекта внутрь СУБД. Lemkoleg Думаю, декомпилировать и копаться в коде - будет лишнее. В java-коде копаться вполне можно. Java была специально написана так, чтобы не было проблем восстановить исходник. В бинарник уже лезть сложнее, игра не стоит свеч. Но, опять же, подсказка. Вот автор java-кода, видимо, не захотел реализовывать на java то, что нашел в виде бинарника. А может, есть такие реализации на java? Или их написать не так уж трудно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 14:39 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
dmdmdm, Реализация вне СУБД - это, как последний вариант. Может подскажите, есть переменная в СУБД, отвечающая за располажение папки для временных файлов. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 14:57 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
Lemkoleg Реализация вне СУБД - это, как последний вариант. Ничего особенно "последнего" в этом варианте не вижу. Такие навороты крутятся десятилетиями, что это - мелочь. Lemkoleg Может подскажите, есть переменная в СУБД, отвечающая за располажение папки для временных файлов. Если проблема именно в permissions (это можно проверить, а не пользоваться методом тыка) - пробовали давать разрешение на "C:\Users\*" (а также сделать имя каталога для TEMP более коротким и без спецсимволов) или просто "*"? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 15:14 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
dmdmdm а также сделать имя каталога для TEMP более коротким и без спецсимволов Я не знаю, как это сделать. Эту директорию использует оракл для себя. Это не системная папка для временных файлов ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 15:19 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
C:\Users\ORACLE~1\AppData\Local\Temp\ Это не системная папка для временных файлов Опять слова "от себя". Код: powershell 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 15:24 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
dmdmdm, D:\Temp Это - системная папка для временных файлов ОС. У оракла она другая ( даном случаи C:\Users\ORACLE~1\AppData\Local\Temp\) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 15:37 |
|
ORA-29532: Java call terminated by uncaught Java exception: java.lang.NoClassDefFoundError
|
|||
---|---|---|---|
#18+
LemkolegЭто - системная папка для временных файлов ОС. Нет, это временная папка текущего пользователя. Почувствуй разницу. И выше я уже намекал про безэкранное окружение сервиса Оракула. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 16:54 |
|
|
start [/forum/topic.php?fid=52&fpage=39&tid=1880970]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 147ms |
0 / 0 |