2014-10-21 2 views
0

Я пытаюсь написать программу, которая отправит функцию нескольким узлам, эти узлы получат эту функцию и выполнит ее, отвечая на результат (через сериализацию). Я немного искал, но ничего не нашел. Альтернативой может быть отправка файла .class через сокет и загрузка его на узле, но мне интересно, если кто-то нашел более простой способjava: Отправить метод через сокет

Редактировать: Я пытаюсь создать кластер с этим клиентом/сервер. И я хочу, чтобы клиент всегда работал на узлах и принимал любую работу без необходимости перекомпилировать код клиентского узла.

Решение: похоже, что нет возможности поместить файл .class. Необходимо отправить его, а затем загрузить его во время выполнения.

ответ

2

Java не похож на некоторые (в основном интерпретируемые) языки, где код является данными. Чтобы сделать то, что вам нужно с исходным кодом Java, вам придется отправить исходный код по проводу, скомпилировать его в файл класса на другом конце и загрузить файл класса. Помимо загрузки файла класса, нет другого способа получить новый код в запущенную JVM.

PS: Открытие порта на вашем компьютере, где вы принимаете произвольный код, а затем выполнять все, что посылает вам клиент, подобно тому, как он владеет ювелирным магазином, и оставлять его незаблокированным и не укомплектованным каждый день, когда вы идете на обед.

P.P.S .: Вы можете встроить интерпретатор в свое приложение. Например, вы можете вставлять JRuby, а затем клиент может отправить вам код Ruby.

+0

Пожалуйста, смотрите редактирование. Я пытаюсь создать кластер. Это не будет подключено к сети и будет работать по локальной сети – kalgecin

+0

@kalgecin, ОК, так что это ювелирный магазин на Луне, но это не меняет основной части моего ответа. Единственный вид кода, который JVM может выполнять напрямую, это байт-коды Java, и единственный способ, которым вы можете получить байт-коды Java в JVM, - это загрузить файл .class. Если у вас есть что-то, что генерирует исходный код Java, то ваш единственный вариант (который я знаю) заключается в том, чтобы сохранить исходный код в файл '.java', вызвать javac в дочернем процессе и загрузить загружаемый' .class' файл в JVM ... –

+0

@kalgecin ... Это зависит от вас, хотите ли вы отправить источник по кабелю и скомпилировать его на удаленном компьютере или сначала скомпилировать его, а затем отправить файл .class; но в любом случае вам понадобится файл .class. –

Смежные вопросы