| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Переслать объект (экземпляр класса) на другую маш |
| Автор: Fieral 24.4.2008, 19:13 |
| Вопрос такой - как организовать пересылку объектов на другой комп, для продолжения процесса обработки? Есть желание раскроить программу на несколько компьютеров, где например данные удут обрабатываться сначала на одном компе, а потом отправляться на другой, и досчитываться уже там такойже программой. |
| Автор: powerOn 24.4.2008, 19:35 |
| Ну например с помощью RMI. |
| Автор: Maksym 27.4.2008, 11:25 |
| Серилизировать/десериализировать, как вариант. |
| Автор: Fieral 30.4.2008, 15:11 |
| Серилизировать/десериализировать насколько я понял, можно только серилизуемые/десериализуемые объекты. В чём тогда смысл этой операции? |
| Автор: mbasil 30.4.2008, 21:03 |
| На самом деле есть и более высокоуровневые технологии EJB и web службы. Что использовать - это скорее вопрос задачи и проблемной области. Web службы сериализуют (или точнее маршаллизируют) в XML. RMI сегодня это низкоуровневая технология. Сгодится скорее для одной задачи, для которой эффективность важнее повторного использования. |
| Автор: Maksym 30.4.2008, 22:28 | ||
| mbasil Согласись, давать в ответ на вопрос
EJB, Web Services и т.п. как-то противоречит принципу Оккама. Хотя ты прав в том что реализовать на этих технологиях будет по любому полезнее. |
| Автор: Fieral 1.5.2008, 03:12 | ||||||||
А с остальными как быть? Добавлено через 6 минут и 54 секунды пакую объект в класс имплементирующий сереализацию
копирую объект путём копирования этого класса
выдаёт: java.io.NotSerializableException: java.awt.image.BufferedImage at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326) |
| Автор: Maksym 1.5.2008, 12:00 |
| Fieral Если не сериализирумый класс правильно завернуть в наследника, который умеет сохранять его состояние, то инстансы этого наследника будут сериализируемыми. http://java.sun.com/j2se/1.5.0/docs/guide/serialization/examples/nonserialsuper/sources.html пример. Кроме того ты можешь реализовать собственный механизм сериализации. Я правильно понял, что ты изображение хочешь просчитывать и пересылать? |
| Автор: Fieral 1.5.2008, 12:04 | ||
Ага. Но не только их - результаты обработки тоже забирать надо будет. |
| Автор: Maksym 1.5.2008, 12:44 |
| Fieral Ну в принципе тебе не обязательно пересылвать несериализируемый BufferedImage, достань из него байты картинки, отправь их, а там уже восстановиш в BufferedImage если он тебе будет нужен. |
| Автор: Fieral 1.5.2008, 14:48 |
| Ну хорошо. Тогда такой вопрос: допустим я буду пересылать что-нибудь ещё, отконвертированное в byte массивы. Как тогда на месте прибытия выяснять что именно приехало и в какой объект это конвертировать? |
| Автор: mbasil 2.5.2008, 12:22 |
| Ну вот и возник вопрос о протоколе пересылки. Это ответ на замечание Maksym в мой адрес. Теперь надо "городить свой протокол или использовать более высокоуровневое решение. На шаг выше RMI. |
| Автор: Maksym 2.5.2008, 13:24 |
| mbasil Чтобы преслать пару объектов и массив байт не нужно городить какой-то сложный протокол. Пока что не вижу в этой задаче ничего такого, чтобы приплетать сюда тяжеленные энтерпрайз решения. Особенно если учесть, что организуются распределенные вычисления и, видимо, важна производительность. |
| Автор: mbasil 2.5.2008, 21:40 |
| Согласен, что энтерпрайз решения может и не требуются. Написал я о них, поскольку некоторые разработчики пытаются решать задачи простыми методами, там где простые методы не подходят и приводят к появлению массы проблем. При засылке разных объектов только массивом байт не обойдешься. Надо обернуть его в общий класс (сериализуемый), который помимо массива байт будет содержать дополнительную информацию о том, что на самом деле содержит массив. А это уже, как не верти хоть и простой но собственный протокол обмена. Если объектов может быть и не два, а больше, то RMI может оказаться предпочтительным. |
| Автор: Maksym 2.5.2008, 23:38 |
| mbasil Ну вобщем мы пришли к консенсусу.. |
| Автор: Fieral 11.5.2009, 16:56 |
| Круто, спустя год я понял о чём они говорят. |