WebSphere wsadmin ClassNotFound Исключения - PullRequest
3 голосов
/ 20 декабря 2010

Я пытаюсь использовать wsadmin с Jython для развертывания файла EAR. Перед фактическим развертыванием мне нужно запустить обновление БД с использованием класса Java. Я сталкиваюсь с ClassNotFoundException, который не имеет смысла для меня.

Справочная информация: EAR-файл взорван. Инструмент wsadmin запускается со следующими параметрами:

-wsadmin_classpath %CP%
-javaoption -Dpython.path=%CP%

Оба они указывают на один и тот же путь к классу, который содержит все необходимые JAR-файлы.

Jython-скрипт получает соединение с базой данных и вызывает служебный класс для создания сценария базы данных. Служебный класс использует отражение для загрузки других классов из пути к классам (это жесткое и быстрое требование к библиотеке, которую мы используем, его нельзя изменить). В основном это выглядит так:

from liquibase import Liquibase

def main(args):
    conn = getConnection(args)
    updater = Liquibase(conn)
    updater.update()

Во время метода update () Liquibase использует отражение для создания экземпляров некоторых классов Java. Это где я получаю ClassNotFoundException, например ClassNotFoundException: com.foo.CustomUpdate

В моем скрипте я могу импортировать класс com.foo.CustomUpdate и не получать ошибок:

from com.foo import CustomUpdate
c = CustomUpdate("select 1")
print c.getUpdate()

Итак, я знаю, что класс находится на пути к классам. Моя единственная идея состоит в том, что это как-то связано с аспектом отражения библиотеки, которую мы используем. Кто-нибудь еще сталкивался с чем-то подобным?

Моя единственная другая идея, если вышеперечисленное невозможно исправить, это разделить вещи на сценарий оболочки и использовать Java для запуска обновления базы данных, а затем wsadmin для развертывания EAR.

...