Mam watpilwosci co do metody readObjects.
Po co ona wlasciwie ma zwracac obiekt typu Objects?
Już mówię o co mi chodzi.
Pierwotne jest założenie takie
example_l1 klasa1 = new example_l1();
klasa1.liczba=3;
example_l1 klasa2 = new example_l1();
Java2RDBSerializer serial = new Java2RDBSerializer(null);
serial.writeObject(null,klasa1);
Java2RDBDeserializer deserial = new Java2RDBDeserializer(serial.connh);
Object obj = new Object();
obj = deserial.readObject();
I teraz jest takie zalozenie, ze obj ma byc rowny klasie example_1.
To nie ma szans wyjsc, "zajedziemy" sie, zanim to nam wyjdzie.
W kodzie deserializera
Class<?> klasa = Class.forName(objectRow.getClassName());
metoda forName ma tworzyc nowa klase na podstawie tej z bazy danych, w tej
chwili to nie dziala (chociaz getClassName() zwraca nazwe klasy) i moim zdaniem
nie bedzie szybko dzialal. To raczej trzeba inaczej do tego podejsc
Metoda readObject nie powinna nic zwracac, a powinna jedynie "wypelniac" pola w klasie,
podklasach, interfejsach etc.
czyli
Java2RDBDeserializer deserial = new Java2RDBDeserializer(serial.connh);
example_l1 obj = new example_l1();
deserial.readObject(obj)
Dalej były by listowane polad w klasie example_l1 i wypelniane wg bazy danych.
Proszę o odpowiedzi programistów co myślą o tym sposobie, żeby można dalej zrobić
jakikolwiek krok naprzód.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Najlepsza jest pełna specyfikacja serializacji obiektów (i przykład standardowej implementacji ObjectInputStream): http://docs.oracle.com/javase/6/docs/platform/serialization/spec/input.html
proszę zerknąć na:
public final Object readObject()
throws OptionalDataException, ClassNotFoundException,
IOException;
Przy deserializacji obiektów, nie możemy statycznie typizować zwracanych obiektów, jeśli nie znamy kolejności zapisu. Dlatego zawsze wynik działania f. readObject jest przypisywany do zmiennej referencyjnej typu Object, a dalej wzystko możemy typizować dynamicznie przy użyciu mechanizmu refleksji
Do tego aby napisać proste testy ser/deser nie musicie korzystać ze skomplikowanych rozwiązań. Wystarczy zapisać pojedynczy obiekt (złożony obiekt) i później odczytać ten obiekt korzystając z operatora konwersji, np.
Java2RDBSerializer e = new Java2RDBSerializer(null);
e.writeObject(new JButton("Hello, world"));
e.close();
Java2RDBDeserializer deserial = new Java2RDBDeserializer(serial.connh);
JButton obj = (JButton) deserial.readObject();
Przy większej kolejce obiektów różnych typów zapisanych do bazy, należy zapewnić ich włąsciwe typowanie w odpowiedniej kolejności przy odczycie, i tyle.
Last edit: Andrzej Marciniak 2012-06-16
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
W sumie rzeczywiście, problem tam polegał na tym, że była serializowana nie pełna nazwa, tylko krótka nazwa.
W tej chwili deserializatorowi brakuję tylko obsługi ArrayList. Zaraz będzie skończony.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Ahoj,
Mam watpilwosci co do metody readObjects.
Po co ona wlasciwie ma zwracac obiekt typu Objects?
Już mówię o co mi chodzi.
Pierwotne jest założenie takie
I teraz jest takie zalozenie, ze obj ma byc rowny klasie example_1.
To nie ma szans wyjsc, "zajedziemy" sie, zanim to nam wyjdzie.
W kodzie deserializera
Class<?> klasa = Class.forName(objectRow.getClassName());
metoda forName ma tworzyc nowa klase na podstawie tej z bazy danych, w tej
chwili to nie dziala (chociaz getClassName() zwraca nazwe klasy) i moim zdaniem
nie bedzie szybko dzialal. To raczej trzeba inaczej do tego podejsc
Metoda readObject nie powinna nic zwracac, a powinna jedynie "wypelniac" pola w klasie,
podklasach, interfejsach etc.
czyli
Dalej były by listowane polad w klasie example_l1 i wypelniane wg bazy danych.
Proszę o odpowiedzi programistów co myślą o tym sposobie, żeby można dalej zrobić
jakikolwiek krok naprzód.
Metoda readObject() powinna zwracać obiekt typu Object. Proszę zerknąć do dokumentacji przykładowego deserializera XML:
http://docs.oracle.com/javase/6/docs/api/java/beans/XMLDecoder.html
W dokumentacji interfejsu Serializable, też można znaleźć wskazówki jakie metody powinny być implementowane w mechanizmie serializera/deserializera :
http://docs.oracle.com/javase/6/docs/api/java/io/Serializable.html
Najlepsza jest pełna specyfikacja serializacji obiektów (i przykład standardowej implementacji ObjectInputStream):
http://docs.oracle.com/javase/6/docs/platform/serialization/spec/input.html
proszę zerknąć na:
public final Object readObject()
throws OptionalDataException, ClassNotFoundException,
IOException;
Przy deserializacji obiektów, nie możemy statycznie typizować zwracanych obiektów, jeśli nie znamy kolejności zapisu. Dlatego zawsze wynik działania f. readObject jest przypisywany do zmiennej referencyjnej typu Object, a dalej wzystko możemy typizować dynamicznie przy użyciu mechanizmu refleksji
Do tego aby napisać proste testy ser/deser nie musicie korzystać ze skomplikowanych rozwiązań. Wystarczy zapisać pojedynczy obiekt (złożony obiekt) i później odczytać ten obiekt korzystając z operatora konwersji, np.
Java2RDBSerializer e = new Java2RDBSerializer(null);
e.writeObject(new JButton("Hello, world"));
e.close();
Java2RDBDeserializer deserial = new Java2RDBDeserializer(serial.connh);
JButton obj = (JButton) deserial.readObject();
Przy większej kolejce obiektów różnych typów zapisanych do bazy, należy zapewnić ich włąsciwe typowanie w odpowiedniej kolejności przy odczycie, i tyle.
Last edit: Andrzej Marciniak 2012-06-16
Dziękuje za zainteresowanie,
W sumie rzeczywiście, problem tam polegał na tym, że była serializowana nie pełna nazwa, tylko krótka nazwa.
W tej chwili deserializatorowi brakuję tylko obsługi ArrayList. Zaraz będzie skończony.