Package de.willuhn.datasource.db
Class AbstractDBObject
- java.lang.Object
-
- java.rmi.server.RemoteObject
-
- java.rmi.server.RemoteServer
-
- java.rmi.server.UnicastRemoteObject
-
- de.willuhn.datasource.db.AbstractDBObject
-
- All Implemented Interfaces:
GenericObject,Changeable,DBObject,Transactionable,java.io.Serializable,java.rmi.Remote
- Direct Known Subclasses:
AbstractDBObjectNode
public abstract class AbstractDBObject extends java.rmi.server.UnicastRemoteObject implements DBObject
Basisklasse fuer alle Business-Objekte- Author:
- willuhn
- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description AbstractDBObject()ct
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidaddDeleteListener(Listener l)Fuegt dem Objekt einen Listener hinzu, der ausgeloest wird, wenn das Objekt gerade geloescht wurde.voidaddStoreListener(Listener l)Fuegt dem Objekt einen Listener hinzu, der ausgeloest wird, wenn das Objekt gespeichert wurde.voidclear()Loescht alle Eigenschaften (incl.voiddelete()Loescht das Objekt aus der Datenbank.protected voiddeleteCheck()Diese Methode wird intern vor der Ausfuehrung von delete() aufgerufen.booleanequals(GenericObject other)Vergleicht dieses Objekt mit dem uebergebenen.java.lang.ObjectgetAttribute(java.lang.String fieldName)Liefert den Wert des angegebenen Attributes.java.lang.String[]getAttributeNames()Liefert ein String-Array mit allen verfuegbaren Attribut-Namen.java.lang.StringgetAttributeType(java.lang.String attributeName)Liefert den Attributtyp des uebergebenen Feldes.protected java.lang.ClassgetForeignObject(java.lang.String field)Prueft, ob das angegebene Feld ein Fremschluessel zu einer anderen Tabelle ist.java.lang.StringgetID()Liefert einen Identifier fuer dieses Objekt.protected java.lang.StringgetIDField()Liefert den Namen der Spalte, in der sich der Primary-Key befindet.protected java.sql.PreparedStatementgetInsertSQL()Liefert das automatisch erzeugte SQL-Statement fuer ein Insert.DBIteratorgetList()Liefert eine Liste aller Objekte des aktuellen Types.protected java.lang.StringgetListQuery()Liefert das automatisch erzeugte SQL-Statement fuer die Erzeugung einer Liste dieses Typs.protected java.lang.StringgetLoadQuery()Liefert das automatisch erzeugte SQL-Statement zum Laden des Objektes.abstract java.lang.StringgetPrimaryAttribute()Liefert den Namen des Primaer-Attributes dieses Objektes.protected DBServiceImplgetService()Liefert den Service-Provider.protected abstract java.lang.StringgetTableName()Liefert den Namen der repraesentierenden SQL-Tabelle.protected java.sql.PreparedStatementgetUpdateSQL()Liefert das automatisch erzeugte SQL-Statement fuer ein Update.protected booleanhasChanged()Prueft, ob das Objekt seit dem Laden geaendert wurde.protected booleanhasChanged(java.lang.String attribute)Prueft, ob sich der Wert des genannten Attributs seit dem Laden geaendert hat.protected voidinit()Holt sich die Meta-Daten der Tabelle und erzeugt die Properties.voidinsert()Speichert das Objekt explizit als neuen Datensatz in der Datenbank.protected voidinsertCheck()Diese Methode wird intern vor der Ausfuehrung von insert() aufgerufen.booleanisNewObject()Prueft, ob es sich um ein neues Objekt oder ein bereits in der Datenbank existierendes handelt.voidload(java.lang.String id)Laedt die Eigenschaften des Datensatzes mit der angegebenen ID aus der Datenbank.voidoverwrite(DBObject object)Ueberschreibt dieses Objekt mit den Attributen des uebergebenen.voidremoveDeleteListener(Listener l)Entfernt den Listener wieder.voidremoveStoreListener(Listener l)Entfernt den Listener wieder.java.lang.ObjectsetAttribute(java.lang.String fieldName, java.lang.Object value)Speichert einen neuen Wert in den Properties und liefert den vorherigen zurueck.voidsetID(java.lang.String id)Speichert die uebergeben ID in diesem Objekt.protected voidsetService(DBServiceImpl service)Speichert den Service-Provider.voidstore()Speichert das Objekt in der Datenbank.voidtransactionBegin()Damit kann man manuell eine Transaktion starten.voidtransactionCommit()Beendet eine manuell gestartete Transaktion.voidtransactionRollback()Rollt die angefangene Transaktion manuell zurueck.protected voidupdateCheck()Diese Methode wird intern vor der Ausfuehrung von update() aufgerufen.-
Methods inherited from class java.rmi.server.UnicastRemoteObject
clone, exportObject, exportObject, exportObject, exportObject, exportObject, unexportObject
-
-
-
-
Method Detail
-
setService
protected void setService(DBServiceImpl service) throws java.lang.Exception
Speichert den Service-Provider.- Parameters:
service-- Throws:
java.lang.Exception
-
getService
protected DBServiceImpl getService()
Liefert den Service-Provider.- Returns:
- Service.
-
init
protected void init() throws java.sql.SQLExceptionHolt sich die Meta-Daten der Tabelle und erzeugt die Properties.- Throws:
java.sql.SQLException- Wenn beim Laden der Meta-Daten ein Datenbank-Fehler auftrat.
-
load
public final void load(java.lang.String id) throws java.rmi.RemoteExceptionDescription copied from interface:DBObjectLaedt die Eigenschaften des Datensatzes mit der angegebenen ID aus der Datenbank.- Specified by:
loadin interfaceDBObject- Parameters:
id- ID des zu ladenden Objektes.- Throws:
java.rmi.RemoteException- im Fehlerfall.- See Also:
DBObject.load(java.lang.String)
-
store
public void store() throws java.rmi.RemoteException, de.willuhn.util.ApplicationExceptionDescription copied from interface:ChangeableSpeichert das Objekt in der Datenbank. Die Funktion prueft selbst, ob es sich um ein neues Objekt handelt und entscheidet, ob ein insert oder update durchgefuehrt werden muss.- Specified by:
storein interfaceChangeable- Throws:
java.rmi.RemoteException- im Fehlerfall.de.willuhn.util.ApplicationException- Wenn das Objekt nicht gespeichert werden darf. Der Grund hierfuer findet sich im Fehlertext der Exception.- See Also:
Changeable.store()
-
clear
public final void clear() throws java.rmi.RemoteExceptionDescription copied from interface:ChangeableLoescht alle Eigenschaften (incl. ID) aus dem Objekt. Es kann nun erneut befuellt und als neues Objekt in der Datenbank gespeichert werden.- Specified by:
clearin interfaceChangeable- Throws:
java.rmi.RemoteException- im Fehlerfall.- See Also:
Changeable.clear()
-
delete
public void delete() throws java.rmi.RemoteException, de.willuhn.util.ApplicationExceptionDescription copied from interface:ChangeableLoescht das Objekt aus der Datenbank.- Specified by:
deletein interfaceChangeable- Throws:
java.rmi.RemoteException- im Fehlerfall.de.willuhn.util.ApplicationException- Wenn das Objekt nicht geloescht werden darf. Der Grund hierfuer findet sich im Fehlertext der Exception.- See Also:
Changeable.delete()
-
getID
public final java.lang.String getID() throws java.rmi.RemoteExceptionDescription copied from interface:GenericObjectLiefert einen Identifier fuer dieses Objekt. Dieser muss innerhalb des gesamten Systems/Services fuer diese Objektart eindeutig sein.- Specified by:
getIDin interfaceGenericObject- Returns:
- der Identifier des Objektes.
- Throws:
java.rmi.RemoteException- See Also:
GenericObject.getID()
-
setID
public final void setID(java.lang.String id)
Speichert die uebergeben ID in diesem Objekt. Diese Funktion ist mit aeusserster Vorsicht zu geniessen. Sie wird z.Bsp. dann gebraucht, wenn ein Objekt von einer DB auf eine andere kopiert wird und dabei zwingend mit der ID der Ursprungs-Datenbank angelegt werden muss.- Parameters:
id-
-
getAttribute
public java.lang.Object getAttribute(java.lang.String fieldName) throws java.rmi.RemoteExceptionDescription copied from interface:DBObjectLiefert den Wert des angegebenen Attributes. Aber die Funktion ist richtig schlau ;) Sie checkt naemlich den Typ des Feldes in der Datenbank und liefert nicht nur einen String sondern den korrespondierenden Java-Typ. Insofern die Businessklasse die Funktion getForeignObject(String field) sinnvoll uberschrieben hat, liefert die Funktion bei Fremdschluesseln sogar gleich das entsprechende Objekt aus der Verknuepfungstabelle.- Specified by:
getAttributein interfaceDBObject- Specified by:
getAttributein interfaceGenericObject- Parameters:
fieldName- Name des Feldes.- Returns:
- Wert des Feldes.
- Throws:
java.rmi.RemoteException- im Fehlerfall.- See Also:
GenericObject.getAttribute(java.lang.String)
-
getAttributeType
public final java.lang.String getAttributeType(java.lang.String attributeName) throws java.rmi.RemoteExceptionDescription copied from interface:DBObjectLiefert den Attributtyp des uebergebenen Feldes. Siehe DBObject.ATTRIBUTETYPE_*.- Specified by:
getAttributeTypein interfaceDBObject- Parameters:
attributeName- Name des Attributes.- Returns:
- Konstante fuer den Attributtyp. Siehe DBObject.ATTRIBUTETYPE_*.
- Throws:
java.rmi.RemoteException- im Fehlerfall.- See Also:
DBObject.getAttributeType(java.lang.String)
-
hasChanged
protected boolean hasChanged()
Prueft, ob das Objekt seit dem Laden geaendert wurde.- Returns:
- true, wenn es geaendert wurde.
-
hasChanged
protected boolean hasChanged(java.lang.String attribute)
Prueft, ob sich der Wert des genannten Attributs seit dem Laden geaendert hat.- Parameters:
attribute- Name des Attributes.- Returns:
- true, wenn es sich geaendert hat.
-
setAttribute
public java.lang.Object setAttribute(java.lang.String fieldName, java.lang.Object value) throws java.rmi.RemoteExceptionSpeichert einen neuen Wert in den Properties und liefert den vorherigen zurueck.- Parameters:
fieldName- Name des Feldes.value- neuer Wert des Feldes. Muss vom Typ String, Date, Timestamp, Double, Integer oder DBObject sein.
Ist der Parameter vom TypdbObjectnimmt die Funktion an, dass es sich um einen Fremdschluessel handelt und speichert automatisch statt des Objektes selbst nur dessen ID mittelsnew Integer(((DBObject)value).getID()).- Returns:
- vorheriger Wert des Feldes.
- Throws:
java.rmi.RemoteException
-
getAttributeNames
public final java.lang.String[] getAttributeNames() throws java.rmi.RemoteExceptionDescription copied from interface:GenericObjectLiefert ein String-Array mit allen verfuegbaren Attribut-Namen.- Specified by:
getAttributeNamesin interfaceGenericObject- Returns:
- Liste aller Attribut-Namen.
- Throws:
java.rmi.RemoteException- See Also:
GenericObject.getAttributeNames()
-
insert
public void insert() throws java.rmi.RemoteException, de.willuhn.util.ApplicationExceptionSpeichert das Objekt explizit als neuen Datensatz in der Datenbank. Die Funktion wird auch dann ein Insert versuchen, wenn das Objekt bereits eine ID besitzt. Das ist z.Bsp. sinnvoll, wenn das Objekt von einer Datenbank auf eine andere kopiert werden soll. Es kann jedoch durchaus fehlschlagen, wenn ein Objekt mit dieser ID bereits in der Datenbank existiert.- Throws:
java.rmi.RemoteException- Wenn beim Speichern Fehler aufgetreten sind.de.willuhn.util.ApplicationException- DurchinsertCheck()erzeugte Benutzerfehler.
-
getUpdateSQL
protected java.sql.PreparedStatement getUpdateSQL() throws java.rmi.RemoteExceptionLiefert das automatisch erzeugte SQL-Statement fuer ein Update. Kann bei Bedarf ueberschrieben um ein vom dynamisch erzeugten abweichendes Statement f�r die Speicherung zu verwenden. Die Funktion darfzurueckliefern, wenn nichts zu aendern ist. - Returns:
- das erzeugte SQL-Statement.
- Throws:
java.rmi.RemoteException- wenn beim Erzugen des Statements ein Fehler auftrat.
-
getInsertSQL
protected java.sql.PreparedStatement getInsertSQL() throws java.rmi.RemoteExceptionLiefert das automatisch erzeugte SQL-Statement fuer ein Insert. Kann bei Bedarf ueberschrieben um ein vom dynamisch erzeugten abweichendes Statement fuer die Speicherung zu verwenden.- Returns:
- das erzeugte SQL-Statement.
- Throws:
java.rmi.RemoteException- Wenn beim Erzeugen des Statements ein Fehler auftrat.
-
getListQuery
protected java.lang.String getListQuery()
Liefert das automatisch erzeugte SQL-Statement fuer die Erzeugung einer Liste dieses Typs. ACHTUNG: Das Statement muss ein Feld mit der Bezeichnung zurueckgeben, diegetIDFieldauch liefert, da das von DBIteratorImpl gelesen wird. Also z.Bsp. "select " + getIDField() + " from " + getTableName(). Kann bei Bedarf �berschrieben um ein abweichendes Statement zu verwenden. Die Funktion muss das Statement nur dewegen als String zurueckliefern, weil es typischerweise von DBIterator weiterverwendet wird und dort eventuell noch weitere Filterkriterien hinzugefuegt werden koennen muessen.- Returns:
- das erzeugte SQL-Statement.
-
getLoadQuery
protected java.lang.String getLoadQuery() throws java.rmi.RemoteExceptionLiefert das automatisch erzeugte SQL-Statement zum Laden des Objektes. Hierbei werden die Eigenschaften des Objektes geladen, dessen ID aktuell vongetID()geliefert wird. ACHTUNG: Das Statement muss alle Felder selecten (*). Also z.Bsp. "select * from " + getTableName() + " where " + getIDField() + " = " + getID(); Kann bei Bedarf �berschrieben um ein abweichendes Statement zu verwenden.- Returns:
- das erzeugte SQL-Statement.
- Throws:
java.rmi.RemoteException- Wenn beim Erzeugen des Statements ein Fehler auftrat.
-
isNewObject
public final boolean isNewObject() throws java.rmi.RemoteExceptionDescription copied from interface:ChangeablePrueft, ob es sich um ein neues Objekt oder ein bereits in der Datenbank existierendes handelt.- Specified by:
isNewObjectin interfaceChangeable- Returns:
- true, wenn es neu ist, andernfalls false.
- Throws:
java.rmi.RemoteException- im Fehlerfall.- See Also:
Changeable.isNewObject()
-
getIDField
protected java.lang.String getIDField()
Liefert den Namen der Spalte, in der sich der Primary-Key befindet. Default: "id".- Returns:
- Name der Spalte mit dem Primary-Key.
-
getTableName
protected abstract java.lang.String getTableName()
Liefert den Namen der repraesentierenden SQL-Tabelle. Muss von allen abgeleiteten Klassen implementiert werden.- Returns:
- Name der repraesentierenden SQL-Tabelle.
-
getPrimaryAttribute
public abstract java.lang.String getPrimaryAttribute() throws java.rmi.RemoteExceptionDescription copied from interface:GenericObjectLiefert den Namen des Primaer-Attributes dieses Objektes. Hintergrund: Wenn man z.Bsp. in einer Select-Box nur einen Wert anzeigen kann, dann wird dieser genommen. Achtung: Die Funktion liefert nicht den Wert des Attributes sondern nur dessen Namen.- Specified by:
getPrimaryAttributein interfaceDBObject- Specified by:
getPrimaryAttributein interfaceGenericObject- Returns:
- Name des Primaer-Attributes.
- Throws:
java.rmi.RemoteException- im Fehlerfall.- See Also:
GenericObject.getPrimaryAttribute()
-
deleteCheck
protected void deleteCheck() throws de.willuhn.util.ApplicationExceptionDiese Methode wird intern vor der Ausfuehrung von delete() aufgerufen. Sie muss �berschrieben werden, damit das Fachobjekt vor dem Durchf�hren der L�schaktion Pr�fungen vornehmen kann. Z.Bsp. ob eventuell noch Abhaengigkeiten existieren und das Objekt daher nicht gel�scht werden kann.- Throws:
de.willuhn.util.ApplicationException- wenn das Objekt nicht gel�scht werden darf.
-
insertCheck
protected void insertCheck() throws de.willuhn.util.ApplicationExceptionDiese Methode wird intern vor der Ausfuehrung von insert() aufgerufen. Sie muss �berschrieben werden, damit das Fachobjekt vor dem Durchf�hren der Speicherung Pr�fungen vornehmen kann. Z.Bsp. ob alle Pflichtfelder ausgef�llt sind und korrekte Werte enthalten.- Throws:
de.willuhn.util.ApplicationException- wenn das Objekt nicht gespeichert werden darf.
-
updateCheck
protected void updateCheck() throws de.willuhn.util.ApplicationExceptionDiese Methode wird intern vor der Ausfuehrung von update() aufgerufen. Sie muss �berschrieben werden, damit das Fachobjekt vor dem Durchf�hren der Speicherung Pr�fungen vornehmen kann. Z.Bsp. ob alle Pflichtfelder ausgef�llt sind und korrekte Werte enthalten.- Throws:
de.willuhn.util.ApplicationException- wenn das Objekt nicht gespeichert werden darf.
-
getForeignObject
protected java.lang.Class getForeignObject(java.lang.String field) throws java.rmi.RemoteExceptionPrueft, ob das angegebene Feld ein Fremschluessel zu einer anderen Tabelle ist. Wenn das der Fall ist, liefert es die Klasse, die die Fremd-Tabelle abbildet. Andernfalls null.- Parameters:
field- das zu pruefende Feld.- Returns:
- Klasse (abgeleitet von DBObject) welche den Fremdschluessel abbildet oder null.
- Throws:
java.rmi.RemoteException- im Fehlerfall.
-
transactionBegin
public final void transactionBegin() throws java.rmi.RemoteExceptionDescription copied from interface:TransactionableDamit kann man manuell eine Transaktion starten. Normalerweise wir bei store() oder delete() sofort bei Erfolg ein commit gemacht. Wenn man aber von aussen das Transaktionsverhalten beeinflussen will, kann man diese Methode aufrufen. Hat man dies getan, werden store() und delete() erst dann in der Datenbank ausgefuehrt, wenn man anschliessend transactionCommit() aufruft.- Specified by:
transactionBeginin interfaceTransactionable- Throws:
java.rmi.RemoteException- im Fehlerfall.- See Also:
Transactionable.transactionBegin()
-
transactionRollback
public final void transactionRollback() throws java.rmi.RemoteExceptionDescription copied from interface:TransactionableRollt die angefangene Transaktion manuell zurueck.- Specified by:
transactionRollbackin interfaceTransactionable- Throws:
java.rmi.RemoteException- im Fehlerfall.- See Also:
Transactionable.transactionRollback()
-
transactionCommit
public final void transactionCommit() throws java.rmi.RemoteExceptionDescription copied from interface:TransactionableBeendet eine manuell gestartete Transaktion. Wenn vorher keintransactionBegin()aufgerufen wurde, wird dieser Aufruf ignoriert.- Specified by:
transactionCommitin interfaceTransactionable- Throws:
java.rmi.RemoteException- im Fehlerfall.- See Also:
Transactionable.transactionCommit()
-
getList
public DBIterator getList() throws java.rmi.RemoteException
Description copied from interface:DBObjectLiefert eine Liste aller Objekte des aktuellen Types.- Specified by:
getListin interfaceDBObject- Returns:
- Liste mit allen Objekten dieser Tabelle.
- Throws:
java.rmi.RemoteException- See Also:
DBObject.getList()
-
overwrite
public void overwrite(DBObject object) throws java.rmi.RemoteException
Description copied from interface:ChangeableUeberschreibt dieses Objekt mit den Attributen des uebergebenen. Dabei werden nur die Werte der Attribute ueberschrieben - nichts anderes. Also auch keine Meta-Daten oder aehnliches. Handelt es sich bei der Quelle um ein Objekt fremden Typs, wird nichts ueberschrieben. Hinweis: Es werden nur die Attribute ueberschrieben, es wird jedoch noch nicht gespeichert. Sollen die Aenderungen also dauerhaft uebernommen werden, muss anschliessend noch einstore()aufgerufen werden.- Specified by:
overwritein interfaceChangeable- Parameters:
object- das Objekt, welches als Quelle verwendet werden soll.- Throws:
java.rmi.RemoteException- im Fehlerfall.- See Also:
Changeable.overwrite(de.willuhn.datasource.rmi.DBObject)
-
equals
public boolean equals(GenericObject other) throws java.rmi.RemoteException
Description copied from interface:DBObjectVergleicht dieses Objekt mit dem uebergebenen. Hinweis: Es wird nicht der Inhalt verglichen sondern nur die ID und der Typ.- Specified by:
equalsin interfaceDBObject- Specified by:
equalsin interfaceGenericObject- Parameters:
other- das zu vergleichende Objekt.- Returns:
- true, wenn sie vom gleichen Typ sind und die selbe ID haben.
- Throws:
java.rmi.RemoteException- See Also:
GenericObject.equals(de.willuhn.datasource.GenericObject)
-
addDeleteListener
public void addDeleteListener(Listener l) throws java.rmi.RemoteException
Description copied from interface:DBObjectFuegt dem Objekt einen Listener hinzu, der ausgeloest wird, wenn das Objekt gerade geloescht wurde. Hinweis: Das Event wird unmittelbar nach dem Loeschen ausgeloest, jedoch noch bevor die ID auf null gesetzt wurde.- Specified by:
addDeleteListenerin interfaceDBObject- Parameters:
l- der Listener.- Throws:
java.rmi.RemoteException- See Also:
DBObject.addDeleteListener(de.willuhn.datasource.rmi.Listener)
-
addStoreListener
public void addStoreListener(Listener l) throws java.rmi.RemoteException
Description copied from interface:DBObjectFuegt dem Objekt einen Listener hinzu, der ausgeloest wird, wenn das Objekt gespeichert wurde. Hinweis: Das Event wird nach dem Speichern ausgeloest.- Specified by:
addStoreListenerin interfaceDBObject- Parameters:
l- der Listener.- Throws:
java.rmi.RemoteException- See Also:
DBObject.addStoreListener(de.willuhn.datasource.rmi.Listener)
-
removeDeleteListener
public void removeDeleteListener(Listener l) throws java.rmi.RemoteException
Description copied from interface:DBObjectEntfernt den Listener wieder.- Specified by:
removeDeleteListenerin interfaceDBObject- Parameters:
l- der Listener.- Throws:
java.rmi.RemoteException- See Also:
DBObject.removeDeleteListener(de.willuhn.datasource.rmi.Listener)
-
removeStoreListener
public void removeStoreListener(Listener l) throws java.rmi.RemoteException
Description copied from interface:DBObjectEntfernt den Listener wieder.- Specified by:
removeStoreListenerin interfaceDBObject- Parameters:
l- der Listener.- Throws:
java.rmi.RemoteException- See Also:
DBObject.removeStoreListener(de.willuhn.datasource.rmi.Listener)
-
-