de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
Andrew Kondratovich
Andrew Kondratovich
質問

リモート(ローカルではない)VMにアタッチする

Java Attach APIは、ローカルVMに接続し、エージェントをエージェントにロードできます。エージェントを読み込むために別のコンピュータのVMにどのように接続できますか?

私はJMXについて知っています。しかし、私はどのように私のカスタムエージェントをリモートVMにロードするのか分からなかった。

たぶん私の問題を解決する別の方法が存在する(リモートVMにカスタムコード(エージェント)をロードして実行する)?

UP。リモートJVMでカスタムコードを実行したい初期JVMパラメータの独立性はプラスです。

ありがとう。

3 2011-10-27T21:09:53+00:00 3
 Kara
Kara
編集された質問 24日 6月 2013 в 10:47
プログラミング
jvm
java
jmx
davorp
29日 10月 2011 в 7:50
2011-10-29T07:50:24+00:00
さらに
ソース
編集
#56793205

It's no problem running a application server (Tomcat) in production, even with remote debugging attached.

更新

あなたのアプリケーション内でカスタムコードを実行したい場合は、クラスを作成してコンパイルし、サーバのどこかに格納してから、アプリ内で次のようなメソッドを実行することができます:

/**
 * This method:
 * 
  • loads a class from the server file system *
  • does a lookup for the method to execute *
  • creates a new instance of the specified class *
  • executes the given method with the given arguments * (which can be null if the method doesn't have arguments) *
  • returns the result of the invoked method * * @param classUrlOnTheServer * @param className * @param methodNameToExecute * @param argumentsForTheMethod arguments that should be passed to * the method of the loaded class - can * be null. * @return returns the result of the invoked method * @throws ClassNotFoundException * @throws MalformedURLException * @throws SecurityException * @throws NoSuchMethodException * @throws InstantiationException * @throws IllegalAccessException * @throws IllegalArgumentException * @throws InvocationTargetException */ public static Object loadAndExecuteCustomMethodFromALoadedClass(String classUrlOnTheServer, String className, String methodNameToExecute, Object ... argumentsForTheMethod) throws ClassNotFoundException, MalformedURLException, SecurityException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { File file = new File(classUrlOnTheServer); URL url = file.toURI().toURL(); URL[] urls = new URL[] { url }; ClassLoader cl = new URLClassLoader(urls); Class clazz = cl.loadClass(className); Method method = clazz.getDeclaredMethod(methodNameToExecute); Object instance = clazz.newInstance(); Object result = method.invoke(instance, argumentsForTheMethod); return result; }
  • 2
    0
    TecHunter
    27日 10月 2011 в 9:14
    2011-10-27T21:14:47+00:00
    さらに
    ソース
    編集
    #56793204

    私は質問を理解していない、あなたはリモートVMに接続したいですか?接続すると、必要なものを実行できます。イベントはVMを終了します。 デバッグモードでVMを起動する必要があります:

    -Xdebug -Xrunjdwp:transport = dt_socket、address = 8000、server = y、suspend = n

    Then in Eclipse for example, create a new remote application profile. check this : http://www.ibm.com/developerworks/opensource/library/os-eclipse-javadebug/index.html

    0
    0
    Andrew Kondratovich
    7日 11月 2011 в 2:37
    2011-11-07T14:37:30+00:00
    さらに
    ソース
    編集
    #56793206

    私は実験的な解決策を見つけました: jsadebugd 。
    次に、 sun.jvm.hotspot.jdi.SAPIDAttachingConnector コネクタで接続できます。


    0
    0
    質問の追加
    カテゴリ
    すべて
    技術情報
    文化・レクリエーション
    生活・芸術
    科学
    プロフェッショナル
    事業内容
    ユーザー
    すべて
    新しい
    人気
    1
    Денис Анненский
    登録済み 1日前
    2
    365
    登録済み 5日前
    3
    True Image
    登録済み 6日前
    4
    archana agarwal
    登録済み 1週間前
    5
    Maxim Zhilyaev
    登録済み 1週間前
    © de-vraag :年
    ソース
    stackoverflow.com
    ライセンス cc by-sa 3.0 帰属