Java 서블릿을 사용하는 WebSphere 6.1 용 애플리케이션을 개발 중입니다. 내 서블릿 내에서 직렬 베슬션 ID를 1L로 정의했습니다. 배포 및 내 응용 프로그램을 실행하면, 나는 (서버 로그에서) 다음과 같은 유형의 LinkageError가 수신 오전 :Java LinkageError 예외는 어떻게 수정합니까?
[5/9/11 15:14:26:868 EDT] 0000001c WebApp
E [Servlet Error]-[ManageRecordsConsumerServlet]: java.lang.Exception:
java.lang.LinkageError: LinkageError while defining class:
<redacted>.docindexupdate.batch.servlet.ManageRecordsConsumerServlet
Could not be defined due to: (<redacted>/docindexupdate/batch/servlet
/ManageRecordsConsumerServlet) class name must be a string at offset=2074
This is often caused by having a class defined at multiple
locations within the classloader hierarchy. Other potential causes
include compiling against an older or newer version of the class
that has an incompatible method signature.
나는 문제가 무엇인지 확실하지 않다. 이전에 직렬 버전 uid를 정의하기 전에 이것을보고 있었고이를 정의하고 일관성있게 유지함으로써 클래스 파일에 대한 향후 업데이트가 성공적으로 실행될 것이라고 생각했습니다. 컴파일 또는 서버 배포 중 오류가 없습니다. 이전 버전의 서블릿이 WebSphere 인스턴스의 어딘가에 캐시 될 수 있습니까? (현재 개발자 머신에만 배포하고 있습니다)?
class name must be a string at offset=2074
라인
도 복잡하다.
실제로 이것은 일어난 것으로 보입니다. 서블릿 전쟁은 "빌드 경로에 필수 프로젝트"로 나열되었습니다. 이 종속성을 제거하면 빌드 시간이 현저히 줄어들뿐만 아니라 문제가 해결되었습니다. – Timbuck
흠 ... 며칠 동안 제대로 작동 한 후에는 오류가 설명되지 않은 방식으로 다시 나타납니다. 내 PC가 그렇게 느리지 않았다면이 문제를 빨리 해결할 수 있었을 것입니다. – Timbuck