У меня возникают исключения приведения классов во время выполнения после развертывания 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, которая позволяет ему игнорировать во время выполнения, что класс вызывает такие ошибки?