SR-JRC | ein Framework für Java-Richclient-Anwendungen |
| LangzeitgedächtnisBei einer graphischen Desktop-Anwendung sind die Transaktionsgrenzen anders, als bei Anwendungsdiensten eines Anwendungsservers. Während bei letzterem davon ausgegangen werden muss, dass der Dienst Teil einer größeren Transaktion ist, ist es bei einer Desktopanwendung so, dass diese den äußersten Rahmen einer Transaktion darstellt. Somit macht es wenig Sinn, einen Bei SR-JRC können viele Trotzdem muss ein Entwickler wissen, dass der TransactionFactory taFactory = ApplicationServiceProvider.getService(TransactionFactory.class); Transaction ta = taFactory.createTransaction(); ta.add(new TOSave TransactionFactory taFactory = ApplicationServiceProvider.getService(TransactionFactory.class); Transaction ta = taFactory.createTransaction(); ta.add(new TOSave Die Zuständigkeit eines <bean id="repository" class="de.schwarzrot.data.access.Repository"> <property name="exporter" ref="entityExporter" /> <property name="importer" ref="entityImporter" /> <property name="managers"> <map> <entry key="de.schwarzrot.app.config.support.AbstractConfigBase" value-ref="prefsEntityManager" /> <entry key="de.schwarzrot.data.VdrEntity" value-ref="vdrEntityManager" /> <entry key="de.schwarzrot.data.Entity" value-ref="jdbcEntityManager" /> <entry key="java.lang.Object" value-ref="baseEntityManager" /> </map> </property> </bean>
AbstractConfigBase , als auch VdrEntity sind Nachfahren von Entity - und alle sind natürlich auch ein java.lang.Object - es gilt also bei der Ermittlung der Zuständigkeit Hierarchien zu beachten. Das bietet SR-JRC frei Haus. In VdrAssistant gibt es 3 Arten von Ein solcher Spezialfall ist der Fall, wenn ein proprietäres System parallel zur SQL-Datenbank gepflegt werden muss. Dann können alle Lesezugriffe auf die Datenbank erfolgen, Schreibzugriffe müssen aber sowohl in der Datenbank, als auch im proprietären System erfolgen. Im konkreten Anwendungsfall ist die Schnittstelle zum proprietären System ein proprietäres TCP/IP Protokoll und der Die Anwendung selbst muss von dem Prozedere nichts wissen. Für sie wird eine Transaktionen kann man in 2 Kategorien einteilen: lesende und schreibende. Schreibende Transaktionen sind bereits im Abschnitt "Beispiel" aufgeführt. Bei den lesenden Transaktionen gibt es viele Spielarten. Wichtig ist, dem TransaktionsManager mitzuteilen, dass dies eine lesende Transaktion ist. Dazu gibt es die Methode Hier ein Beispiel, wie der Job-Verarbeiter die zu verarbeitende Aufnahme nachliest: Transaction ta = taFactory.createTransaction(); TORead<Recording> tor = new TORead<Recording>(Recording.class); tor.addCondition(new EqualConditionElement("id", job.getSubject())); tor.setReadRelated(true); ta.add(tor); ta.setRollbackOnly(); ta.execute(); if (tor.getResult() != null && tor.getResult().size() > 0) { job.setSubject(tor.getResult().get(0)); } Einer der Vorzüge von SR-JRC ist sicherlich der Umstand, dass man aus der API heraus bestimmen kann, ob Referenzen aufgelöst werden sollen, oder nicht. Bei der Bedingung ist es so, dass Nach Ausführung der Transaktion wird geprüft, ob die Leseoperation erfolgreich war und eine Aufnahme gefunden wurde. Falls dem so ist, wird das Subjekt des Jobs ersetzt. In SR-JRC gibt es folgende Transaktions-Operationen:
Viele Werte werden in einer Java-Anwendung anders verwendet, bzw. interpretiert, als in einer Datenbank oder in einer Datei. Aus diesem Grund verwenden Natürlich kann eine Anwendung auch eigene Übersetzungshelferlein anmelden oder vorhandene ersetzen. Die Schnittstelle der Übersetzungshelfer ist wie folgt definiert: public interface Converter { public Object fromPersistence(Class> type, Object value); public Class> getValueType(); public Object toPersistence(Object value, int physicalSize); } fromPersistence wird per "type" angegeben, welche Klasse das Attribut in der Java-Welt haben soll. Diese Information ist im umgekehrten Falle nicht erforderlich. Bei toPersistence kann es notwendig sein, den Wert aus der Java-Welt zu beschneiden. Sonst könnte es zu Unstimmigkeiten mit der Datenbank kommen. |