웹 모듈 (myWeb.war
)과 EJB 모듈 (myModel.jar
)이라는 두 개의 모듈이있는 웹 응용 프로그램의 EAR (myApp.ear
)이 있습니다. 이제 같은 패키지 myPackage
에있는 두 모듈 모두에있는 클래스 myDuplicate.class
이 있습니다. 클래스의 구현은 두 모듈에서 모두 다릅니다.응용 프로그램의 두 모듈에있는 중복 클래스 - 인스턴스화 클래스에서 참조 할 수 있습니까?
웹 모듈의 클래스가 myDuplicate
클래스의 객체를 만드는 경우 객체의 크기는 myWeb
이거나 myModel
인 것입니다.
이 작업은 서버의 클래스로드 메커니즘에 달려 있습니까? 그렇다면이 클래스 로딩을 제어하기 위해 OC4J
서버 구성에 매개 변수가 있습니까? 그렇지 않다면 무엇이 그것을 통제합니까?
위의 내용은 너무 일반적인 것 같지만 실제로 직면하고있는 실용적인 문제입니다. 다른 환경에서 다른 클래스가로드되고 있지만 그것을 제어 할 수없는 것을 알 수 없습니다. 나는 검색을 시도하고 답변이 될 수도있는 클래스 로더에게 왔습니다. 그러나 그 후에도 두 환경 모두에서 일관된 방식으로 동작하도록 제어하는 방법을 찾을 수 없었습니다.
명확하지 않은 내용이 있으면 공유하지 말고 명확히하려고 노력하겠습니다.
FQN이 동일 할 경우에만 중복됩니다. 그럴 경우 JVM은 클래스 로더에서 발생한 첫 번째 로딩을로드합니다. 이는 클래스 로더가 디스크에서 어떻게 찾았는지 배후의 특성에 달려 있다고 생각합니다. 이 링크는 클래스 로더가 클래스 경로에서 엔티티를 평가하는 방법을 알려줍니다 (기본 클래스 로더를 사용하고 있다고 가정). https://docs.oracle.com/javase/7/docs/technotes/tools/findingclasses.html –
@ MarkW 패키지와 클래스 이름이 같습니다. 네, FQN은 같습니다. 나는 클래스 로더를 사용하지 않고 있지만, 앱 서버는 제어 할 수 없다. BTW 클래스의 선택에 영향을 미칠 수있는 클래스 로딩 외에 무엇이 있습니까? –
그 사실을 알고 있지는 않지만 테스트 할 수있는 것은 확실합니다. 중복 클래스가 포함 된 종속성이 앱의 ClassPath JVM arg에 같은 순서로 나타나는지 확인하는 것입니다. 나는 ear 파일로 어떻게 작동하는지 알지 못한다. 그러나 클래스 패스가 같으면 (클래스 파일의 요소의 순서를 의미하는), 같은 클래스를 같은 방식으로 다른 애플 리케이션에로드해야하며, 그것의 사본에 상대적으로 목록에서 처음으로 넣어 사용되는 제어 할 수 있습니다. –