tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Oliver Gierke
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
473
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    Servus,

    ich verwende Hibernate für mein kleines Projekt. Es gibt eigentlich auch keine Besonderheiten daran.
    Ich würde innerhalb meines Programms von Zeit zu Zeit abfragen wollen, ob die Verbindung noch intakt ist.
    Leider macht es nicht viel Sinn im Standardverhalten von Hibernate die Methoden session.isClosed() oder session.isConnected() aufzurufen. Diese liefern immer true zurück.
    Allerdings bin ich bereit zu glauben, dass man diese Methoden nicht aus Langeweile erstellt hat. Ich denke mir, dass es vielleicht nur eine Einstellungssache ist. Nur leider fehlt mir die Kenntniss. Ich habe keine Ahnung wie diese Option heißt. Ich dachte, dass es vieleicht die Eigenschaft "testonborrow" ist, nur leider brachte das keinen Erfolg. Kann mit einer helfen?
    Hier meine config:
    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
                                                                                                                                    <hibernate-configuration>
        <session-factory>
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.url">***</property>
            <property name="connection.username">***</property>
            <property name="connection.password">***</property>
            <!--<property name="hibernate.show_sql">
    true</property> -->
            <property name="connection.autocommit">true</property>
            <property name="testOnBorrow">true</property>
            <mapping class="chronos.persistence.entities.Booking"/>
            <mapping class="chronos.persistence.entities.Card"/>
            <mapping class="chronos.persistence.entities.CardHistory"/>
          </session-factory> 
    </hibernate-configuration>
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

  2. #2
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Eine Session ist etwas anderes als eine Verbindung. Desweiteren hoffe ich, dass du die Session nicht über die ganze Applikationszeit aufrecht erhältst. D.h was du effektiv machen kannst, istr schauen, ob du gerade eben eine Verbindung aufbauen kannst (und dann annehmen, dass Hibernate das auch kann). Im Normalfall reicht ein manueller SELECT auf irgendeine bekannte Tabelle via plain JDBC.

    Gruß
    Ollie
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  3. #3
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    Unwissend wie ich bin, habe ich schon versucht diese eine Session die ganze Zeit über aufrecht zu erhalten. Ich hole mir die Session wie folgt:
    java Code: SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();

    session = sf.openSession();



    Und das einzige, das ich bisher wirklich damit mache ist:
    java Code: session.save(myObject);




    Dein Vorschlag zur Überwachung ist schon eine gute Alternative, aber eigentlich möchte ich ja wissen, ob Hibernate selbst eine Verbindung zu DB hinbekommt und halten kann.OK das mit dem Testobject laden lassen klingt auch gut (und das werde ich auch machen, wenn sich nicht noch eine bessere Lösung anbietet)

    PS: Ich bin gern bereit das mit der dauerhaften Session zu ändern, aber ich bin halt einer der es immer genau wissen will. Kannst Du mir also sagen, was daran verwerflich ist?
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

  4. #4
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Eine Session ist, wie der Name schon sagt, ein "Arbeitszyklus" von Hibernate. D.h. alles, was darn passiert, bleibt solange im Speicher bis jemand die Session schließt. Wenn du die jetzt die ganze Zeit offen hältst, hast du nach ner gewissen Zeit die komplette DB im Speicher -> ungut. Desweiteren gehen die dirtyread checks über alle Objekte in der Session was bedeutet, dass die mit zunehmender Größe immmer langsamer werden...

    Im Idealfall konfiguriert man sich eine DataSource und lässt Hibernate mit der arbeiten. Das hat den Vorteil, dass man auch an Hibernate vorbei recht leicht die DB pingen kann.

    Gruß
    Ollie
    RealHAZZARD bedankt sich. 
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  5. #5
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    Ok. Danke. Das hat mich überzeugt. Damit wurde mein Problem gelöst.
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

Ähnliche Themen

  1. Script zum Verbindungstest?
    Von Niklas1812 im Forum PHP
    Antworten: 3
    Letzter Beitrag: 06.02.10, 11:05
  2. Antworten: 3
    Letzter Beitrag: 23.05.09, 10:18
  3. Socket verbindungstest
    Von fettyteddy im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 05.11.08, 11:59
  4. Verbindungstest zu einer Datenbank auf einem Sql Server!?
    Von Ardro im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 09.01.08, 14:37
  5. Verbindungstest zu einer Datenbank auf einem Sql Server!?
    Von Ardro im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 09.01.08, 14:37