Передача составных объектов с использованием Java RMI - PullRequest
0 голосов
/ 11 декабря 2019

Мне нужно отправить план лечения для клиента с помощью RMI. Сервер и клиент находятся в отдельных проектах, оба имеют определенные классы (сущности и удаленный интерфейс):

public class Plan implements Serializable {
    private Integer id;
    private Date periodStart;
    private Date periodEnd;
    private Integer patientId;
    private Medication medications;
}

public class Medication implements Serializable {
    private Integer id;
    private String name;
    private Integer dosage;
    private Integer intakeInterval;
}

public interface PillService extends Remote {
    public Plan getPlan(int id) throws RemoteException;
}

Приведенный выше код работает нормально, но мне нужно иметь список лекарств в Plan как это:

 public class Plan implements Serializable {
        ...
        private List<Medication> medications;
    }

Если я бегу с этим Plan классом, я получаю это исключение:

Client exception: java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
    java.lang.ClassNotFoundException: org.hibernate.collection.internal.PersistentBag (no security manager: RMI class loader disabled)

После этого я добавил SecutiryManager к System, я получаюошибка:

java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)

Итак, все отлично работает без List<Medication> в Plan. Разве RMI не любит составные объекты? Должен ли я определить новый дистанционный метод для получения списка лекарств отдельно?

...