Я отслеживаю через JMX сервлет, работающий в Tomcat, с другим сервлетом, работающим в том же экземпляре Tomcat. Когда я настраиваю get() для возврата стандартных типов данных Java (String, int, byte[] и т. д.), это работает нормально. Но когда я использую определенный пользователем класс, я получаю исключение ClassCastException, которое выдает следующее сообщение:
java.lang.ClassCastException: blah.My_UserDefinedClass cannot be cast to blah.My_UserDefinedClass
Я почти уверен, что это из-за разных загрузчиков классов на инструментальном уровне и на уровне управления (сервлет monitoring и сервлет monitoring соответственно). Я дважды проверил файл .jar, содержащий пользовательский класс для каждого сервлета, и оба файла jar идентичны друг другу.
Я использую стандартные MBeans и настроил отслеживаемый сервлет для возврата этого атрибута:
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 )
{
}
}
Хотя я мог бы сгенерировать несколько get() с каждой отправкой стандартного типа данных Java, я хотел бы создать/использовать свой собственный класс POD/POJO, который инкапсулирует все различные стандартные биты и бобы (которые являются стандартными типами данных Java), которые я хочу отправить обратно, чтобы я мог получить свои данные за один вызов.
есть идеи?
Спасибо,
Счет
Использование tomcat7, java6, windows xp, 32bit