#java #oracle11g #java-stored-procedures #loadjava
#java #oracle11g #java-хранимые процедуры #loadjava
Вопрос:
Я хочу хранить библиотеки Java в своей базе данных Oracle. Обратите внимание, что я делаю это впервые. Эта библиотека pd4ml. Он состоит из двух jar, которые содержат скомпилированные классы.
pd4ml.jar
ss_css2.jar
(требуется pd4ml.jar )
Поскольку загрузка их с помощью Toad не сработала (Toad сказал, что они были успешно загружены, но они нигде не отображались) Я перешел в командную строку (loadjava) и успешно загрузился ss_css2.jar
. Все его классы были загружены и скомпилированы.
Вторая библиотека, pd4ml.jar
, также была загружена, но несколько классов не будут компилироваться. Я запустил ojvmtc, чтобы попытаться разрешить ссылки. Я получил следующее сообщение:
Не удалось найти следующие классы:
javax / servlet/http / HttpServletResponseWrapper
org /zefer / pd4ml / npdf / parser / c
Первый, если я правильно понимаю, должен быть частью JRE, встроенной в 11g r2. Просматривая sys
схему, она, похоже, не существует.
Вторая библиотека является частью библиотеки jar. Теперь я не совсем уверен в структуре скомпилированной Java, мне никогда раньше не приходилось в нее заглядывать, но у меня есть несколько файлов .class внутри org/zefer/pd4ml/npdf/parser/
, это: c$_b
, c$_c
…. to c$_g
. Нет ни одного, который является единственным c
.
Библиотека хорошо работает на моем локальном компьютере при передаче аргументов командной строки или запуске из Eclipse, поэтому она должна работать. При попытке их компиляции в Toad не появляется конкретного сообщения об ошибке. У меня такое чувство, что это проблема с зависимостями / путем к классам.
Любые подсказки о том, как я должен убедиться, что классы, содержащиеся в pd4ml.jar
, могут правильно обращаться к ss_css2.jar
ним, или какие-либо потенциальные причины для расследования? Возможно, есть способ получить подробные сообщения об ошибках из кода Java?
Комментарии:
1. Попробуйте загрузить из командной строки с помощью
loadjava
command, может дать более подробную информацию об ошибках. Эта статья может быть полезной. И попробуйте это тоже2. Документация для команды loadjava из командной строки. При первом запуске могут возникнуть различные проблемы. Поэтому лучше использовать опцию отладки на
3. Я использовал loadjava без особого успеха (я упомянул «переход в командную строку» в своем первоначальном сообщении, что, возможно, было непонятно — я отредактировал). Использование
-verbose
команды дало мне serveralORA-2953
без какой-либо более подробной информации: они такие же, которые отображаются как недопустимые в Toad.4. Вы пробовали использовать опцию отладки при загрузке файлов jar?
5. Оба выполнены вместе с
-fileoutput
(очень удобно ссылаться / проверять ошибки), увы, без решения проблемы. Я должен добавить, что я пытался использовать-genmissing
опцию, которая избавляет отORA-29534
orORA-29519
, но вместо этого выдает ошибки Java (noSuchMethod).
Ответ №1:
Странные имена классов, такие как c $ _b, c $ _c …. до c $ _g, являются результатом запутывания файлов JAR. Запутывание влияет только на непубличные классы, поэтому оно не должно нанести вреда.
Как я вижу, в вашем конкретном случае отсутствует класс javax / servlet / http / HttpServletResponseWrapper (и, вероятно, еще несколько) — классы можно найти в servlet-api.jar . Просто возьмите файл из любого дистрибутива J2EE (или Tomcat) и добавьте файл в свой проект / приложение.
В обычных сценариях классы servlet-api требуются только при вызове методов PD4ML, специфичных для WebApp. И методы вызываются только тогда, когда pd4ml.jar является частью веб-приложения (это означает servlet-api.jar является одним из ресурсов приложения).
Как я вижу сейчас, подсистема Oracle database Java сканирует все ресурсы, на которые ссылаются (даже если они не нужны в сценарии), и паникует, если чего-то не хватает.