Итак, у меня есть задание, которое мне нужно сделать для учебы в колледже. Назначение - создать приложение клиент-сервер с использованием OCSF (Object Client Server Framework) и отобразить простое табличное представление на стороне клиента с данными из mySql, находящимися на стороне сервера, таким образом, чтобы его можно было редактировать прямо из GUI (реализация JavaFX).
Я почти три дня пытаюсь выполнить эту работу безуспешно.
Весь поток данных от клиента к серверу и наоборот должен быть сериализован. У меня было бесконечное количество проблем во время написания кода, но две из них я «едва исправил»: * ObservableList необходим для опции обновления таблицы из GUI, но это не-сериализуемый объект, поэтому я изменил его на ArrayList, чтобы я мог преобразовать его в ObservableList на стороне клиента.
* Чтобы использовать параметры bean-компонента JavaFX, такие как setCellValueFactory(new PropertyValueFactory<>("....")
Мне нужно было использовать stringProperty
внутри класса Employee вместо String
для сохранения экземпляра. данные, но stringProperty не является сериализуемым.
Метод, который я нашел для решения этой проблемы в Stackoverflow, заключался в создании настраиваемой сериализации класса Employee и ручной записи всех данных полей Employee в ObjectOutputStream. НО это не работает.
Проблема, с которой я сейчас сталкиваюсь и которую я действительно пытался решить безуспешно, заключается в том, что ObjectInputStream.readObject возвращает пустое значение.
Это класс Employee:
public class Employee extends User implements Serializable{
private static final long serialVersionUID = 4591080419112442854L;
private transient StringProperty EmployeeID, Role, Department;
public Employee(String employeeid, String role, String department, String firstname, String lastname,
String email, String username, String password) {
super(username, password, firstname, lastname, email);
this.Department = new SimpleStringProperty(this, department);
this.Role = new SimpleStringProperty(this, role);
this.EmployeeID = new SimpleStringProperty(this, employeeid);;
}
/* ~~~~~~ Serialization Methods ~~~~~~ */
private void writeObject(ObjectOutputStream out)
throws IOException {
out.writeObject(Department.get());
out.writeObject(Role.get());
out.writeObject(EmployeeID.get());
out.writeObject(firstname.get());
out.writeObject(lastname.get());
out.writeObject(email.get());
out.writeObject(username.get());
out.writeObject(password.get());
}
private void readObject(ObjectInputStream in)
throws IOException,
ClassNotFoundException {
in.defaultReadObject(); // always call this first
Department = new SimpleStringProperty((String) in.readObject());
Role = new SimpleStringProperty((String) in.readObject());
EmployeeID = new SimpleStringProperty((String) in.readObject());
firstname = new SimpleStringProperty((String) in.readObject());
lastname = new SimpleStringProperty((String) in.readObject());
email = new SimpleStringProperty((String) in.readObject());
username = new SimpleStringProperty((String) in.readObject());
password = new SimpleStringProperty((String) in.readObject());
}
//////////////////////////////////////////
public StringProperty employeeIDProperty() {
return this.EmployeeID;
}
public StringProperty roleProperty() {
return this.Role;
}
public StringProperty departmentProperty() {
return this.Department;
}
public void setEmployeeID(String EmployeeID) {
if(EmployeeID != null) {
this.EmployeeID.set(EmployeeID);
}
}
public void setEmployeeRole(String Role) {
if(Role != null) {
this.Role.set(Role);
}
}
public void setEmployeeDep(String Department) {
if(Department != null) {
this.Department.set(Department);
}
}
}
Я попытался отладить программу и посмотреть, что «под капотом», когда программа входит в методы writeObject и readObject. Единственное, что я заметил, и я не могу найти какую-либо связь с моей проблемой, но, возможно, вы это сделаете, это то, что процесс чтения и процесс записи выполняются разными потоками (что я считаю обязательным), и что ObjectOutputStream содержит больше объектов принадлежащий OCSF (Framework), а не только данные, которые я пытался добавить.
Так что, после долгих часов попыток, я как бы сдался. Мне действительно нужна помощь с этим. Может быть, у кого-то есть представление о том, что может вызвать такое поведение? Может быть, еще одна идея о том, как передать данные с mysql на сервер клиенту, отобразить их и дать возможность изменить данные с GUI?
Буду признателен за любой совет!