2010-03-12 4 views
1

JBOSS에 대해 약간 혼란스럽고 다른 JDK에서 실행하고 있습니다. 예를 들어 내가 JBOSS 5.1을 실행 중이며 JDK5를 가리 키기 위해 JAVA_HOME을 설정했다고 가정 해 봅시다. Java EE 애플리케이션이 JDK6에서 컴파일되었다고 가정 해 봅시다. 나는 자바 EE 응용 프로그램을 배포 할 경우 내가 얻을 내 EJB를 조회 할 때 JBOSS에 (JDK6에서 컴파일) 같은 오류 : 나는 JDK5에서 내 코드를 다시 컴파일하고 다시 배포한다면, 그것은 잘 작동JBoss - JBoss가 실행중인 것과 동일한 JDK에서 컴파일해야합니까?

javax.naming.NameNotFoundException: tc_test_project not bound 

EJB를 조회 할 수 있습니다.

마찬가지로, JAVA_HOME을 JDK6으로 설정하고 JBOSS를 시작할 수 있으며 (JDK6 아래에서 컴파일 된) 내 코드가 해당 시나리오에서 ok로 실행됩니다 (EBJ 등을 찾을 수 있음).

Java EE 응용 프로그램이 JBOSS 서버가 실행될 JAVA_HOME 아래에서 컴파일해야하거나 오해 한 것 같습니까? 확인을 얻고 싶었습니다. 고마워요.

답변

6

JBOSS를 실행하는 데 사용되는 JDK와 동일하거나 낮은 버전의 응용 프로그램으로 컴파일해야합니다. 응용 프로그램이 동일한 JVM을 사용하기 때문입니다.

+0

설명해 주셔서 감사합니다. – dcp

-1

아니요, -target 1.5을 옵션으로 전달하면 JDK6으로 컴파일 할 수 있으므로 java 1.5 클래스 파일을 출력합니다. 더 새로운 언어 기능을 사용하기 위해 플래그를 지정하려면 -source 1.5를 추가하십시오.

따라서 응용 프로그램이 실행될 VM 버전을 대상으로하고 대상 VM에있는 기능 만 사용하는 경우 최신 JDK로 컴파일 할 수 있습니다.

편집 : 나는 그것이 좋은 생각이나 옳은 것이라고 결코 주장하지 않았습니다.

+0

그 목적을 저버리지 않는가? – dcp

+0

유용성은 로컬 박스에 있으므로 모든 버전으로 컴파일 할 수 있습니다. 프로덕션 서버에는 계약상의 제한이나 보안 문제로 인해 버전 제한이있을 수 있습니다. –

+2

이것은 안전한 일이 아닙니다. 타겟 환경에 존재하지 않는 클래스와 API에 의존하는 코드를 쉽게 개발할 수 있으므로 클래스를 찾을 수없는 오류가 발생합니다. 대상 옵션은이 문제를 해결하지 않으며 언어 기능 만 처리합니다. – Robin

관련 문제