2012-09-18 5 views
2

Je travaille actuellement sur JBoss 7.1.1 avec JPA (avec Hibernate) et Spring. J'ai @Transactional de printemps pour prendre soin des transactions. J'utilise actuellement le H2 database interne de JBoss 7.1.1. Toutes les transactions fonctionnent correctement lorsque le serveur est en marche. Mais une fois mon serveur éteint, toutes les modifications apportées aux beans entité ne sont pas enregistrées dans les fichiers de la base de données H2 sur Redémarrer le serveur JBoss. Après l'arrêt du serveur JBoss, lorsque je me connecte à la base de données H2 à l'aide des fichiers, je vois que le schéma est créé mais les données ne sont pas sauvegardées.Hibernate n'enregistre pas les données dans H2 de JBoss 7.1.1

Je pense que ce n'est pas le problème avec mon code, mais une certaine configuration, car il fonctionne correctement lorsque l'application est en cours d'exécution.

Voici mon persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0"> 
    <persistence-unit name="myappname" transaction-type="JTA"> 
     <jta-data-source>java:/DefaultDS</jta-data-source> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 
      <property name="jboss.entity.manager.factory.jndi.name" value="java:app/myappname"/> 
     </properties> 
    </persistence-unit> 

</persistence> 

DataSource à standalone.xml:

<datasource jta="true" jndi-name="java:/DefaultDS" pool-name="DefaultDS" enabled="true" use-java-context="true"> 
    <connection-url>jdbc:h2:file:${jboss.server.data.dir}${/}h2${/}localDB</connection-url> 
    <driver>h2</driver> 
    <pool> 
     <min-pool-size>5</min-pool-size> 
     <max-pool-size>20</max-pool-size> 
    </pool> 
    <security> 
     <user-name>sa</user-name> 
    </security> 
    <timeout> 
     <idle-timeout-minutes>0</idle-timeout-minutes> 
    </timeout> 
    <statement> 
     <prepared-statement-cache-size>32</prepared-statement-cache-size> 
    </statement> 
</datasource> 

Comment puis-je obtenir ce travail?

Merci à l'avance

+1

Je ne suis pas sûr, mais pourrait vous essayez d'utiliser l'application d'un chemin absolu, je pense que ce serait 'jdbc: h2: file:/$ {} jboss.server.data.dir/h2/localdb 'ou peut-être' jdbc: h2: fichier: $ {/} $ {jboss.server.data.dir} $ {/} h2 $ {/} localDB' (pas sûr si/pourquoi aurait-il besoin de $ {/} être utilisé au lieu de simplement '/'). –

+0

@ThomasMueller Merci pour la réponse. J'ai oublié de vous mettre à jour. J'ai essayé ce que tu as suggéré. Cela ne semble pas fonctionner :-( – Chris

+0

Je pense toujours que l'URL de la base de données est le problème.Je testerais avec une URL de base de données entièrement codée en dur, par exemple: 'jdbc: h2: fichier:/data/jboss/h2/localDB'. –

Répondre

0

La seule chose qui semble inhabituel sur la configuration persistence.xml et source de données est le chemin montré de base de données, cependant, j'ai essayé votre configuration sur JBoss AS 7.1.1 avec un chemin de base de données similaire et Je ne peux pas reproduire le problème. Je peux définitivement accéder aux données persistantes de l'application, même après le redémarrage ou l'arrêt du serveur. Cependant, mon application n'utilise pas Spring; peut-être le problème réside dans la configuration de printemps, ou ailleurs? Êtes-vous certain de vous connecter au même fichier de base de données H2 que votre application utilise?

0

dans votre fichier hibernate.cfg.xml vous devriez avoir

<property name="hibernate.hbm2ddl.auto">create</property> 

au lieu de créer qui tombe toujours et reconstitue la table utiliser validate.

<property name="hibernate.hbm2ddl.auto">validate</property> 
Questions connexes