Далучыць да выдаленага (не лакальным) VM

Ява Attach API можна прымацаваць да мясцовых ВМ і нагрузкі агентаў да яго. Як я магу падлучыцца да VM на іншым кампутары для загрузкі агента?

Я ведаю пра JMX. Але я не знайшоў, як загрузіць мой уласны агент для выдаленай VM.

Можа быць, там існуе іншыя спосабы, каб вырашыць маю праблему (для загрузкі і выканання карыстацкага кода (агент) для выдаленай VM)?

UPD. Я хачу, каб выканаць карыстацкі код на выдаленай JVM. Незалежнасць зыходных параметраў JVM плюс.

Дзякуючы.

3
Якая зыходная задача вам трэба вырашыць такім чынам?
дададзена аўтар Thorbjørn Ravn Andersen, крыніца
Я буду моцна адгаворваць выкарыстанне агентаў для абнаўлення праграмнага забеспячэння. Толькі ўявіце сабе праблему падтрымкі вы можаце атрымаць на гэтым.
дададзена аўтар Thorbjørn Ravn Andersen, крыніца
ўкладання, маніторынг і абнаўленне кода на выдаленым кіраванне чыстымі віртуальных машын
дададзена аўтар Andrew Kondratovich, крыніца

3 адказы

Гэта не праблема запуску сервера прыкладанняў (Tomcat) ў вытворчасці, нават з выдаленай адладкі прыкладаецца .

АБНАЎЛЕННЕ

Калі вы хочаце, каб выканаць карыстацкі код ўнутры вашага прыкладання, то адно рашэнне было б напісаць клас і скампіляваць яго, захоўваць яго дзе-то на сэрвэры, а затым ўнутры вашага прыкладання выканаць некаторы метад, як гэта:

/**
 * 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
    дададзена
    З выдаленай адладкі вы можаце вылічаць выразы (цэлыя радкі кода). Вы не можаце захаваць гэты код, але вы можаце змяніць значэння палёў і зменных. Я не зусім разумею, што вы want't, калі ласка, вы можаце змяніць вам першае пытанне і растлумачыць у дэталях.
    дададзена аўтар davorp, крыніца
    Я абнавіў свой адказ ...
    дададзена аўтар davorp, крыніца
    Мне трэба ўводзіць адмысловы код. З JMX я магу атрымаць інфармацыю пра выдаленай JVM, але я не магу укараніць і выканаць код. Прыкласці API забяспечваюць спосабы загрузкі выкананага агента ў віртуальнай машыны Java, але толькі мясцовай віртуальнай машыны Java. Я шукаў спосаб зрабіць тое ж самае з выдаленай JVM.
    дададзена аўтар Andrew Kondratovich, крыніца
    абнаўляецца, як вы хочаце.
    дададзена аўтар Andrew Kondratovich, крыніца

    Я не разумею пытанне, вы проста хочаце, каб падключыцца да выдаленага VM? Пры падключэнні вы можаце выканаць усе, што вы хочаце, падзея спыняе VM. Вы павінны пачаць VM ў рэжыме выпраўленьня:

    -Xdebug -Xrunjdwp: транспарт = транспарт па сокетаў, адрас = 8000, сервер = у, прыпыніць = п

    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
    дададзена
    Я ведаю пра адладкавыя інтэрфейсах, але мне гэта трэба для вытворчасці, а не для адладкі.
    дададзена аўтар Andrew Kondratovich, крыніца

    Я знайшоў эксперыментальнае рашэнне: jsadebugd
    . Тады вы можаце прымацаваць да яго sun.jvm.hotspot.jdi.SAPIDAttachingConnector раздым.

    0
    дададзена
    што ты маеш на ўвазе? Колькі крокаў?
    дададзена аўтар Nick Dong, крыніца
    Хіба ў вырашыць гэтую праблему ў праграме? @ Андрэй Knodratovich
    дададзена аўтар Nick Dong, крыніца
    У мяне такая ж праблема з вамі. Як падключыць аддалены JVM і ўвесці код з дапамогай праграмы без перазагрузкі аддаленага JVM, каб дадаць некаторыя аргументы адладкі?
    дададзена аўтар Nick Dong, крыніца