Oracle Java хранимые библиотеки не будут компилироваться

#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 команды дало мне serveral ORA-2953 без какой-либо более подробной информации: они такие же, которые отображаются как недопустимые в Toad.

4. Вы пробовали использовать опцию отладки при загрузке файлов jar?

5. Оба выполнены вместе с -fileoutput (очень удобно ссылаться / проверять ошибки), увы, без решения проблемы. Я должен добавить, что я пытался использовать -genmissing опцию, которая избавляет от ORA-29534 or ORA-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 сканирует все ресурсы, на которые ссылаются (даже если они не нужны в сценарии), и паникует, если чего-то не хватает.