[Spring + Hibernate] Wartezeiten bei Interaktionen mit der Datenbank

Wyatt

Erfahrenes Mitglied
Hallo Jungs!

Ich habe nun ein Problem mit Hibernate, zumindest glaube ich, dass es daran liegt:
Es geht um die Geschwindigkeit (wohl eher Wartezeiten) bei jeder Aktion mit Hibernate... sei es saveOrUpdate(obj) oder delete(obj)!

Die Datenbank (HSQLDB) besteht nur aus einer einzigen Tabelle mit vier Spalten.

Mein DAO schaut so aus:
Java:
import java.util.Collection;

import org.springframework.orm.hibernate3.HibernateTemplate;

public class UserDAOImpl extends HibernateTemplate implements UserDAO {

	public void saveUser(User user) {
		this.saveOrUpdate(user);
	}

	public void deleteUser(User user) {
		this.delete(user);
	}

	public Collection<User> findAllUsers() {
		return this.loadAll(User.class);
	}

}

Abhängigkeiten werden über die XML injiziert.

XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
 "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
	<bean id="UserDao" class="UserDAOImpl">
		<property name="sessionFactory">
			<ref bean="SessionFactory" />
		</property>
	</bean>
	<bean id="SessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="DataSource" />
		</property>
		<property name="mappingResources">
			<list>
				<value>User.hbm.xml</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
				<prop key="hibernate.show_sql">false</prop>
			</props>
		</property>
	</bean>
	<bean id="DataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName">
			<value>org.hsqldb.jdbcDriver</value>
		</property>
		<property name="url">
			<value>jdbc:hsqldb:file:database/user.db;shutdown=true</value>
		</property>
		<property name="username">
			<value>sa</value>
		</property>
		<property name="password">
			<value></value>
		</property>
	</bean>
</beans>

Kann man auf anhieb schon sagen, woran das liegt? Falls nicht, bitte genau sagen, was für Informationen benötigt werden!

Gruß
Felix
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

weiterhin erweitert man für Hibernate basierte Daos in Spring Anwendungen besser die Klasse HibernateDaoSupport anstatt HibernateTemplate direkt, aber das nur mal so am Rande.

Gruß Tom
 
Hi Ollie, Hi Tom!

@Ollie:
Grundsätzlich ist es ein Geschwindigkeitsproblem. Mein Controller (ActionListener auf einem Button) ruft die Methode aus dem DAO auf. Die Aktion (save, delete) braucht unheimlich lange, die View (Swing-GUI) friert ein und wird erst nach ein paar Sekunden wieder freigegeben.

Transaktionen habe ich garnicht eingebaut. Ich habe mich an einem HibernateTemplate-Tutorial von tutego.org orientiert.

Es werden keine Fehler o.ä. in der Log ausgegeben, die Aktion (save, delete) wird durchgeführt und die Daten stehen in der HSQLDB.

@Tom:
Die Änderung hat nichts gebracht, das Geschwindigkeitsproblem ist weiterhin vorhanden. Allerdings bedanke ich mich für den Hinweis :)

Ich hoffe, die Informationen bringen uns weiter...

Gruß
Felix
 
Hallo,

Grundsätzlich ist es ein Geschwindigkeitsproblem. Mein Controller (ActionListener auf einem Button) ruft die Methode aus dem DAO auf. Die Aktion (save, delete) braucht unheimlich lange, die View (Swing-GUI) friert ein und wird erst nach ein paar Sekunden wieder freigegeben.

Solche Aktionen sollte man auch nicht im Event Dispatch Thread ausführen, da es dadurch zu den von dir erlebten blockierten UIs kommt. Am besten startest du aus dem Action Listener heraus die Aktion in einem neuen Thread und informierst die Oberfläche dann asynchron (EventQueue / SwingUtilitiwes.invokeLater(...) ) wenn der Vorgang abgeschlossen ist.

Gruß Tom
 

Neue Beiträge

Zurück