JMX를 통해 Tomcat에서 실행중인 서블릿과 Tomcat의 동일한 인스턴스에서 실행중인 다른 서블릿을 모니터링하고 있습니다. 표준 Java 데이터 유형 (String, int, byte [] 등)을 반환하도록 get()을 설정하면 정상적으로 작동합니다.JMX를 통해 사용자 정의 클래스에 액세스 할 때 ClassCastException이 발생합니다.
java.lang.ClassCastException: blah.My_UserDefinedClass cannot be cast to blah.My_UserDefinedClass
나는이 때문에 계측에서와 관리 계층에서 다른 클래스 로더입니다 상당히 확신합니다 (: 나는 사용자 정의 클래스를 사용할 때, 나는이 메시지를 제공 ClassCastException를 얻을 서블릿을 모니터링하고 각각 모니터링 서블릿). 각 서블릿에 대한 사용자 정의 클래스가 들어있는 .jar 파일을 두 번 확인했으며 두 jar 파일은 서로 동일합니다.
나는 표준의 MBean을 사용하고 있는데,이 속성 돌아가려면 모니터링 서블릿을 설정 한 :
public interface MyMonitorMBean
{
public My_UserDefinedClass getAllData();
}
구현 :
public class MyMonitor implements MyMonitorMBean
{
private My_UserDefinedClass mAllData;
@Override
public My_UserDefinedClass getAllData()
{
return mAllData;
}
}
코드이 데이터에 액세스 할 수있는 관리 서블릿 :
를private void getAllDataFromMBean()
{
try
{
// this line generates the ClassCastException
My_UserDefinedClass allData = (My_UserDefinedClass)mMBS.getAttribute(mObjectName, "AllData");
}
catch(Exception e)
{
}
}
표준 Java 데이터 유형을 각각 전송할 때마다 여러 개의 get()을 생성 할 수 있지만 , 나는 하나의 호출로 데이터를 얻을 수 있도록 다시 보내려는 다양한 표준 비트와 bob (표준 Java 데이터 유형)을 모두 캡슐화하는 자체 POD/POJO 클래스를 작성/사용하고 싶습니다.
의견이 있으십니까? tomcat7, java6, 윈도우 XP, 32 비트를 사용
감사합니다,
빌
는
글쎄, 여기 가능한 해결책 : 대신 MBS.getAttribute는(), MBS.getAttributes 전화를 호출하는() 반환해야하는 * 모든 * 자신의 값을 속성. 여전히 MBean 클래스를 단순화 할 수는 없지만 관리 레이어에서 어느 정도 단순화 할 수 있습니다. – joe7pak