Исключения приведения классов к классу с помощью EAR / Jenkins, сгенерированных EAR в WebSphere 6.1 - PullRequest
1 голос
/ 11 ноября 2011

У меня возникают исключения приведения классов во время выполнения после развертывания ear, сгенерированного как часть скрипта ant build, работающего на Jenkins, в Websphere 6.1. Исключения класса преобразования есть в некоторых методах DAO, которые приводят Объекты, возвращенные из запросов SQL, к определенным классам.

Если я сгенерирую EAR из Eclipse (RAD), исключений приведения классов не будет, и сравнение файлов классов из сгенерированного уха jenkins / ant с файлами из Eclipse покажет разные размеры и содержание файлов.

Я пытаюсь заставить ant выполнить javac с помощью JDK, поставляемого с Webspehre 6.1. поэтому в Дженкинсе я настроил многоконфигурационный проект для использования IBM JDK. Я предполагаю, что это заставит задачу ant javac использовать этот jdk.

Это мое задание по муравью javac:

    <javac srcdir="${src.dir}" destdir="${build.dir}"  debug="true"  debuglevel="vars,lines,source" target="1.5">
        <classpath refid="master-classpath" />
    </javac>

Единственное, о чем я могу думать сейчас, - это убедиться, что муравей действительно работает с этим jdk, а не просто выполняет javac с этим jdk. Есть ли способ проверить?

[edit] Я изменил файл ant.bat для вывода JAVA_HOME, и он работает под тем, который я указал в jenkins.

[edit2]

Хорошо, наконец-то нашли причину проблемы:

В методе Hibernate DAO у нас есть некоторый (плохой) код, подобный этому:

String sql = "select {entity.*}, {entity2.*}, ...";
SQLQuery  query = sessionFactory.getCurrentSession().createSQLQuery(sql);
...
List<Entity> queryResult = query.list();
for (Object row : queryResult) {
     Object[] arr = (Object[])row;
     Entity entity - (Entity)arr[0];
     Entity2 entity2 - (Entity2)arr[1];
}

Можете ли вы определить ошибку школьника?

queryResult это не List<Entity>, а List<Object[]> - исключение при использовании класса произошло for (Object row : queryResult)

Итак, теперь мой вопрос - что случилось с стиранием типа?

И какую опцию компилятора использует Eclipse, которая позволяет ему игнорировать во время выполнения, что класс вызывает такие ошибки?

1 Ответ

0 голосов
/ 14 ноября 2011

Возможно, это не JDK, а другие библиотеки, которые отличаются.Стоит проверить.

...