Передать инструкции клиентам с помощью socket java

169
14 января 2018, 04:36

Есть клиент и сервер подключенные по сокету. Необходимо сделать чтобы сервер мог отправлять клиенту данные и список действий над ними без перекомпиляции кода клиента. Как это можно реализовать средствами Java или подскажите что я делаю не правильно?

Сделал объект который посылаю:

public class Action<T extends Serializable> implements Serializable {
    private List<T> data;
    private List<Operation> operations = new ArrayList<>();
    ...
 }

где пример Operation это :

public class MapOperation implements Operation, Serializable {
    SAM s2;
    public MapOperation(Object obj) {
        s2 = (SAM & Serializable) obj;
    }
...
    public interface SAM {
        Object action(Object s);
    }
}

Создается данный объект довольно громоздко

Action action = ActionUtil.fromTextFile("...")
                .add(new MapOperation(
                    (MapOperation.SAM & Serializable) s1 -> someFunc(s1))
                .add(new MapOperation((MapOperation.SAM & Serializable) s1 -> ((Integer) s1) * 2))
                .collect();

Но при изменении данного кода на сервере, клиент либо делает тоже самое либо возвращает ошибку InvalidClassException Incompatible class (SUID) Ошибка возвращается когда меняется число операций.

Так же прошу заметить, в моем случае использование классов наследуемых от Function для создания своих лямбд и последующей сериализации, к сожалению, невозможно.

READ ALSO
Что значит класс определяет метод?

Что значит класс определяет метод?

Что значит класс определяет метод?

241
Массив неизвестного типа на Java

Массив неизвестного типа на Java

Есть параметризованный класс (дженерик), в нём есть поле-массивНужно в конструкторе с параметром "длина массива" создать массив

250
Картинка из интернета Picasso

Картинка из интернета Picasso

Здравствуйте! У меня есть ссылка картинки и ее нужно отобразить в ImageViewНо она не отображается

214
Servlet в netBeans

Servlet в netBeans

В чем проблемa? На картинке ниже думаю все понятноЕсли что не понятно пишите

160