JBoss - должно ли приложение быть скомпилировано под тем же jdk, под которым работает JBOSS?

Я немного запутался по поводу JBOSS и запуска его под разными JDK. Например, предположим, что я использую JBOSS 5.1, и перед запуском я установил JAVA_HOME, чтобы он указывал на JDK5. Давайте также предположим, что мое приложение Java EE скомпилировано в JDK6. Если я развертываю приложение Java EE (скомпилированное в JDK6) в JBOSS, при попытке поиска своих EJB-компонентов у меня появляются такие ошибки:

javax.naming.NameNotFoundException: tc_test_project not bound

Но если я перекомпилирую свой код в JDK5 и повторно разверну его, он будет работать нормально и сможет нормально искать EJB-компоненты.

Аналогично, я могу установить JAVA_HOME в JDK6 и запустить JBOSS, и мой код (скомпилированный в JDK6) будет работать нормально в этом сценарии (он может найти EBJ и т. Д.).

Таким образом, кажется, что ваше приложение Java EE должно быть скомпилировано под тем же JAVA_HOME, на котором будет работать сервер JBOSS, или я что-то неправильно понимаю? Просто хотел получить подтверждение, спасибо.

2 ответа

Решение

Приложение должно быть скомпилировано с той же или более низкой версией JDK, используемой для запуска JBOSS. Это потому, что приложение будет использовать ту же JVM.

Нет, вы должны иметь возможность компилировать с JDK6, если вы передадите опцию -target 1.5, чтобы она выводила файлы классов java 1.5. Добавьте -source 1.5, если вы хотите, чтобы вас отмечали за использование новых языковых функций.

Таким образом, он может быть скомпилирован с более новым JDK до тех пор, пока вы нацеливаетесь на версию виртуальной машины, под которой будет работать приложение (и только используете функции, которые существуют в целевой виртуальной машине).

РЕДАКТИРОВАТЬ: Я никогда не утверждал, что это была хорошая идея или право, только это возможно.

Другие вопросы по тегам