JMX経由で、Tomcatで実行されているサーブレットとTomcatの同じインスタンスで実行中の別のサーブレットを監視しています。標準のJavaデータ型(String、int、byte []など)を返すようにget()を設定すると、正常に動作します。私は、ユーザー定義のクラスを使用する場合でも、私はこのメッセージを与えるClassCastExceptionが取得:JMX経由でユーザー定義クラスにアクセスするときのClassCastException
java.lang.ClassCastException: blah.My_UserDefinedClass cannot be cast to blah.My_UserDefinedClass
私は、これは計測で、経営層(であるため、異なるクラスローダであるかなり確信していますサーブレットとモニタリングサーブレットをそれぞれ監視します)。私は各サーブレットのユーザー定義クラスを含む.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()を生成できますが私は、標準のJavaデータ型であるさまざまな標準ビットとボブをすべてカプセル化して自分のPOD/POJOクラスを構築/使用したいと思います。
どのような考えですか? tomcat7、Java6の、Windows XPの、32ビットを使用して
おかげで、
ビル
は
さて、ここでの可能な解決策があります:代わりにMBS.getAttributeを(呼び出す)、*全ての*その値を持つ属性を返す必要がありMBS.getAttributes()を呼び出します。 MBeanクラスを単純化することはできませんが、管理レイヤーではやや単純化できます。 – joe7pak