Class DBServiceImpl

  • All Implemented Interfaces:
    DBService, Service, java.io.Serializable, java.rmi.Remote
    Direct Known Subclasses:
    EmbeddedDBServiceImpl

    public class DBServiceImpl
    extends java.rmi.server.UnicastRemoteObject
    implements DBService
    Diese Klasse implementiert eine ueber RMI erreichbaren Datenbank.
    Author:
    willuhn
    See Also:
    Serialized Form
    • Field Summary

      • Fields inherited from class java.rmi.server.RemoteObject

        ref
    • Constructor Summary

      Constructors 
      Constructor Description
      DBServiceImpl()
      Erzeugt eine neue Instanz.
      DBServiceImpl​(java.lang.String jdbcDriver, java.lang.String jdbcURL)
      Erzeugt eine neue Instanz.
      DBServiceImpl​(java.lang.String jdbcDriver, java.lang.String jdbcURL, java.lang.String jdbcUsername, java.lang.String jdbcPassword)
      Erzeugt eine neue Instanz.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void checkConnection​(java.sql.Connection conn)
      Kann von abgeleiteten Klassen ueberschrieben werden, um die Connection zu testen.
      <T extends DBObject>
      DBIterator<T>
      createList​(java.lang.Class<? extends DBObject> c)
      Liefert eine Liste aller in der Datenbank vorhandenen Objekte des angegebenen Typs,
      <T extends DBObject>
      T
      createObject​(java.lang.Class<? extends DBObject> c, java.lang.String identifier)
      Erzeugt ein neues Objekt des angegebenen Typs.
      java.lang.Object execute​(java.lang.String sql, java.lang.Object[] params, ResultSetExtractor extractor)
      Fuehrt ein SQL-Statement aus und uebergibt das Resultset an den Extractor.
      protected boolean getAutoCommit()
      Liefert true, wenn autocommit aktiv sein soll.
      protected java.sql.Connection getConnection()
      Liefert die Connection, die dieser Service gerade verwendet.
      protected boolean getInsertWithID()
      Liefert true, wenn der DB-Service bei INSERT-Queries vorher die zu verwendende ID ermitteln soll.
      protected java.lang.String getJdbcDriver()
      Liefert den JDBC-Treiber.
      protected java.lang.String getJdbcPassword()
      Liefert das JDBC-Passwort.
      protected java.lang.String getJdbcUrl()
      Liefert die JDBC-URL.
      protected java.lang.String getJdbcUsername()
      Liefert den JDBC-Usernamen.
      java.lang.String getName()
      Liefert den sprechenden Namen des Services.
      protected int getTransactionIsolationLevel()
      Liefert den Transaction-Isolation-Level.
      boolean isStartable()
      Prueft, ob der Service gestartet werden darf.
      boolean isStarted()
      Prueft, ob dieser Service gestartet ist.
      protected void setClassFinder​(de.willuhn.util.ClassFinder finder)
      Definiert einen optionalen Classfinder, der von dem Service zum Laden von Objekten genommen werden soll.
      protected void setClassloader​(java.lang.ClassLoader loader)
      Definiert einen optionalen benutzerdefinierten Classloader.
      void start()
      Startet den Service.
      void stop​(boolean restartAllowed)
      Stoppt den Service.
      • Methods inherited from class java.rmi.server.UnicastRemoteObject

        clone, exportObject, exportObject, exportObject, exportObject, exportObject, unexportObject
      • Methods inherited from class java.rmi.server.RemoteServer

        getClientHost, getLog, setLog
      • Methods inherited from class java.rmi.server.RemoteObject

        equals, getRef, hashCode, toString, toStub
      • Methods inherited from class java.lang.Object

        finalize, getClass, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • DBServiceImpl

        public DBServiceImpl()
                      throws java.rmi.RemoteException
        Erzeugt eine neue Instanz.
        Throws:
        java.rmi.RemoteException
      • DBServiceImpl

        public DBServiceImpl​(java.lang.String jdbcDriver,
                             java.lang.String jdbcURL)
                      throws java.rmi.RemoteException
        Erzeugt eine neue Instanz.
        Parameters:
        jdbcDriver - JDBC-Treiber-Klasse.
        jdbcURL - JDBC-URL.
        Throws:
        java.rmi.RemoteException
      • DBServiceImpl

        public DBServiceImpl​(java.lang.String jdbcDriver,
                             java.lang.String jdbcURL,
                             java.lang.String jdbcUsername,
                             java.lang.String jdbcPassword)
                      throws java.rmi.RemoteException
        Erzeugt eine neue Instanz.
        Parameters:
        jdbcDriver - JDBC-Treiber-Klasse.
        jdbcURL - JDBC-URL.
        jdbcUsername - Username.
        jdbcPassword - Passwort.
        Throws:
        java.rmi.RemoteException
    • Method Detail

      • getConnection

        protected java.sql.Connection getConnection()
                                             throws java.rmi.RemoteException
        Liefert die Connection, die dieser Service gerade verwendet.
        Returns:
        Connection.
        Throws:
        java.rmi.RemoteException
      • checkConnection

        protected void checkConnection​(java.sql.Connection conn)
                                throws java.sql.SQLException
        Kann von abgeleiteten Klassen ueberschrieben werden, um die Connection zu testen.
        Parameters:
        conn - die zu testende Connection. Ist nie null.
        Throws:
        java.sql.SQLException
      • setClassFinder

        protected void setClassFinder​(de.willuhn.util.ClassFinder finder)
        Definiert einen optionalen Classfinder, der von dem Service zum Laden von Objekten genommen werden soll. Konkret wird er in creatObject und createList verwendet, um zum uebergebenen Interface eine passende Implementierung zu finden. Dabei wird die Funktion findImplementor() im ClassFinder befragt.
        Wurde kein ClassFinder angegeben, versucht der Service direkt die uebergebene Klasse zu instanziieren. Ist dies der Fall, koennen den beiden create-Methoden natuerliche keine Interfaces-Klassen uebergeben werden.
        Parameters:
        finder - zu verwendender ClassFinder.
      • setClassloader

        protected void setClassloader​(java.lang.ClassLoader loader)
        Definiert einen optionalen benutzerdefinierten Classloader. Wird er nicht gesetzt, wird Class.forName() benutzt.
        Parameters:
        loader - Benutzerdefinierter Classloader.
      • isStartable

        public boolean isStartable()
                            throws java.rmi.RemoteException
        Description copied from interface: Service
        Prueft, ob der Service gestartet werden darf.
        Specified by:
        isStartable in interface Service
        Returns:
        true, wenn er gestartet werden darf, sonst false.
        Throws:
        java.rmi.RemoteException
        See Also:
        Service.isStartable()
      • start

        public void start()
                   throws java.rmi.RemoteException
        Description copied from interface: Service
        Startet den Service.
        Specified by:
        start in interface Service
        Throws:
        java.rmi.RemoteException
        See Also:
        Service.start()
      • stop

        public void stop​(boolean restartAllowed)
                  throws java.rmi.RemoteException
        Description copied from interface: Service
        Stoppt den Service.
        Specified by:
        stop in interface Service
        Parameters:
        restartAllowed - legt fest, ob der Service im laufenden Betrieb neu gestartet werden kann.
        Throws:
        java.rmi.RemoteException
        See Also:
        Service.stop(boolean)
      • createObject

        public <T extends DBObject> T createObject​(java.lang.Class<? extends DBObject> c,
                                                   java.lang.String identifier)
                                            throws java.rmi.RemoteException
        Description copied from interface: DBService
        Erzeugt ein neues Objekt des angegebenen Typs.
        Specified by:
        createObject in interface DBService
        Parameters:
        c - Name der Klasse des zu erzeugenden Objektes.
        identifier - der eindeutige Identifier des Objektes. Kann null sein, wenn ein neues Objekt erzeugt werden soll. Andernfalls wird das mit dem genannten Identifier geladen.
        Returns:
        Das erzeugte Objekt
        Throws:
        java.rmi.RemoteException
        See Also:
        DBService.createObject(java.lang.Class, java.lang.String)
      • createList

        public <T extends DBObjectDBIterator<T> createList​(java.lang.Class<? extends DBObject> c)
                                                      throws java.rmi.RemoteException
        Description copied from interface: DBService
        Liefert eine Liste aller in der Datenbank vorhandenen Objekte des angegebenen Typs,
        Specified by:
        createList in interface DBService
        Parameters:
        c - Name der Klasse von der eine Liste geholt werden soll.
        Returns:
        Eine Liste mit den gefundenen Objekten.
        Throws:
        java.rmi.RemoteException
        See Also:
        DBService.createList(java.lang.Class)
      • isStarted

        public boolean isStarted()
                          throws java.rmi.RemoteException
        Description copied from interface: Service
        Prueft, ob dieser Service gestartet ist.
        Specified by:
        isStarted in interface Service
        Returns:
        true wenn er gestartet ist, sonst false.
        Throws:
        java.rmi.RemoteException
        See Also:
        Service.isStarted()
      • getName

        public java.lang.String getName()
                                 throws java.rmi.RemoteException
        Description copied from interface: Service
        Liefert den sprechenden Namen des Services.
        Specified by:
        getName in interface Service
        Returns:
        Name des Services.
        Throws:
        java.rmi.RemoteException
        See Also:
        Service.getName()
      • getJdbcDriver

        protected java.lang.String getJdbcDriver()
                                          throws java.rmi.RemoteException
        Liefert den JDBC-Treiber.
        Returns:
        der JDBC-Treiber.
        Throws:
        java.rmi.RemoteException
      • getJdbcUrl

        protected java.lang.String getJdbcUrl()
                                       throws java.rmi.RemoteException
        Liefert die JDBC-URL.
        Returns:
        die JDBC-URL.
        Throws:
        java.rmi.RemoteException
      • getJdbcUsername

        protected java.lang.String getJdbcUsername()
                                            throws java.rmi.RemoteException
        Liefert den JDBC-Usernamen.
        Returns:
        der Username.
        Throws:
        java.rmi.RemoteException
      • getJdbcPassword

        protected java.lang.String getJdbcPassword()
                                            throws java.rmi.RemoteException
        Liefert das JDBC-Passwort.
        Returns:
        das JDBC-Passwort.
        Throws:
        java.rmi.RemoteException
      • getTransactionIsolationLevel

        protected int getTransactionIsolationLevel()
                                            throws java.rmi.RemoteException
        Liefert den Transaction-Isolation-Level.
        Returns:
        transactionIsolationLevel Transaction-Isolation-Level (Default:-1).
        Throws:
        java.rmi.RemoteException
        See Also:
        Connection.TRANSACTION_NONE, Connection.TRANSACTION_READ_COMMITTED, Connection.TRANSACTION_READ_UNCOMMITTED, Connection.TRANSACTION_REPEATABLE_READ, Connection.TRANSACTION_SERIALIZABLE
      • getAutoCommit

        protected boolean getAutoCommit()
                                 throws java.rmi.RemoteException
        Liefert true, wenn autocommit aktiv sein soll. Default: false.
        Returns:
        Autocommit.
        Throws:
        java.rmi.RemoteException
      • getInsertWithID

        protected boolean getInsertWithID()
                                   throws java.rmi.RemoteException
        Liefert true, wenn der DB-Service bei INSERT-Queries vorher die zu verwendende ID ermitteln soll. MySQL zum besitzt eine auto_increment-Funktion, mit der es nicht notwendig ist, die ID beim Insert mit anzugeben. Falls die Datenbank das jedoch nicht korrekt kann (z.Bsp. McKoi), dann kann die Funktion true liefern. In dem Fall wird vor dem Insert ein "select max(id)+1 from table" ausgefuehrt und diese ID fuer das Insert verwendet. Standard-Wert: TRUE
        Returns:
        true, wenn bei Inserts vorher die ID ermittelt werden soll.
        Throws:
        java.rmi.RemoteException