IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[Swing / Hibernate / JPA / Spring] Recherche d'exemples


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut [Swing / Hibernate / JPA / Spring] Recherche d'exemples
    Bonjour tout le monde,

    Je travaille sur un projet Swing avec NetBeans.

    Le client impose que la couche métier du projet soit faîte dans un projet à part, packagé ensuite en .jar.

    Le problème maintenant c'est que je dois faire un projet qui utilise Hibernate/JPA managé par Spring.
    J'ai cherché des exemples sur le net mais je trouve seulement des cas pour des projets web.

    Quelqu'un aurait-il des exemples d'applications Hibernate/JPA managé par spring à m'indiquer ?

    Merci infiniment pour votre aide.

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    http://static.springsource.org/sprin...m.html#orm-jpa

    Sachant qu'il te faudra configurer Hibernate en tant qu'implémentation de JPA

    De plus il est recommandé que la couche métier soit séparée de l'appli cliente. Et mise à disposition via des Web Services depuis un serveur Web.

    Celà évite particulièrement de laisser un accès direct à la base pour l'utilisateur, ce qui est dangereux niveau sécurité.

    Ce qui donne ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Client Swing <-----WebService----> Serveur d application contenant la couche métier gérée via Spring <----JDBC----> Base de données.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    Merci d'abord pour la réponse.

    actuellement j'ai réussi à faire la couche persistence en utilisant hibernate/JPA : voici le code :
    -La class de test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    package ra.cabinet.persistence.jpa;
     
    import java.util.GregorianCalendar;
     
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.omg.CORBA.portable.ApplicationException;
     
    import ra.cabinet.persistence.pojos.Event;
     
    public class InitDB {
     
    	 public  static void main(String[] args) {
    	        // Récupération d'une session Hibernate
    	        Session s = HibernateUtils.getSession();
     
    	        // Début de la transaction
    	        Transaction t = s.beginTransaction();
     
    	        // Création d'un objet Event
    	        Event e = new Event();
    	        e.setTitle("Titre de l'event ");
    	        e.setDescription("Description de l'évènement 33");
    	        e.setBeginDate(new GregorianCalendar());
    	        e.setAllDay(false);
     
    	        // Enregistrement de l'event
    	        s.save(e);
     
    	        // Fin de la transaction
    	        t.commit();
     
    	        // Fermeture de la session Hibernate
    	        s.close();
    	    }
     
     
    }

    -La class hibernateUtils.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    package ra.cabinet.persistence.jpa;
     
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
     
    public class HibernateUtils {
     
    	 private static  final SessionFactory sessionFactory;
    	    // Crée une unique instance de la SessionFactory à partir de hibernate.cfg.xml
    	    static {
    	        try {
    	            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
    	        } catch (HibernateException ex) {
    	            throw new RuntimeException("Problème de configuration : " + ex.getMessage(), ex);
    	        }
    	    }
     
    	    // Renvoie une session Hibernate
    	    public static Session getSession() throws HibernateException {
    	        return sessionFactory.openSession();
    	    }
     
    }
    Le fichier hibernate.cfg.xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
      "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     
    <hibernate-configuration>
        <session-factory>
     
            <!--  Paramètres de connexion à la base de données -->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost/test</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password"></property>
            <!-- Comportement pour la conservation des tables -->
            <!--property name="hbm2ddl.auto">create</property>-->
            <!-- Fichiers à mapper -->
            <mapping class="ra.cabinet.persistence.pojos.Event" />
            <!-- Affiche les logs SQL -->
     
         </session-factory>
     </hibernate-configuration>

    Et l'entity Event :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    package ra.cabinet.persistence.pojos;
     
    import java.util.Calendar;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;
     
    /**
    *
    * @author USER
    */
     
    @Entity
    @Table(name="events_01")
    public class Event {
       @Id
       @GeneratedValue(strategy=GenerationType.AUTO)
       @Column(name="events_id")
       private Integer id;
       @Column(name="events_title", nullable=false)
       private String title;
       @Column(name="events_description")
       private String description;
       @Column(name="events_beginDate")
       @Temporal(TemporalType.DATE)
       private Calendar beginDate;
       @Column(name="events_allDay")
       private boolean allDay;
     
       public Event() {
       }
     
       public boolean isAllDay() {
           return allDay;
       }
     
       public void setAllDay(boolean allDay) {
           this.allDay = allDay;
       }
     
       public Calendar getBeginDate() {
           return beginDate;
       }
     
       public void setBeginDate(Calendar beginDate) {
           this.beginDate = beginDate;
       }
     
       public String getDescription() {
           return description;
       }
     
       public void setDescription(String description) {
           this.description = description;
       }
     
       public Integer getId() {
           return id;
       }
     
       public void setId(Integer id) {
           this.id = id;
       }
     
       public String getTitle() {
           return title;
       }
     
       public void setTitle(String title) {
           this.title = title;
       }
     
    }
    -Maintenant je veux faire la couche métier en spring, la couche qui manipules les résultats renvoyé par la couche persistance.

    Alors que pensez-vous de ça?

    Sinon franchement je vois pas comment faire pour configurer spring pour al couche métier, merci de m'indiquer comment faire.

    Merci d'avance.

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Spring doit tout manager, avec entre autres la couche de persistance.

    Tu trouveras un exemple concret d'une mise en place dans le billet du blog developpez suivant:

    http://blog.developpez.com/djo-mos/p...ge-par-spring/


    Cette partie métier doit elle être intégrée directement dans le client lourd, ou être séparée et et communiquer avec le client lourd via des WebServices?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    Merci d'abord pour tes réponses.

    Oui j'ai vu ce blog, je suis entrain de le faire, mais j'ai un seul souci, comment indiquer a mon application (de type java application) qu'elle doit récupérer le fichier applicationContext du spring, l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ApplicationContext context = new ClassPathXmlApplicationContext("/spring-hibernate-jpa-config.xml");
    est suffisant?

    En faîte ce qui concerne l'intégration on va générer le .jar de cette partie métier et l'intégrer dans la couche présentation (l'application Swing).

    Tu penses que ça posera un problème?.

    Merci d'avance.

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il suffit de lui indiquer le chemin du fichier de config dans le classpath.


    Si le fichier de config se trouve dans le package com.monentreprise.monapplication il faudra écrire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ApplicationContext context = new ClassPathXmlApplicationContext("/com/monentreprise/monapplication/spring-hibernate-jpa-config.xml");

    Personellement je trouve qu'intégrer directement la partie service dans l'application java est une mauvaise idée. En effet, cela nécessite d'ouvrir l'accès à la base de données à tout les clients, et de plus d'intégrer les credentials (login/mot de passe) dans le livrable de l'application.

    Autant dire qu'avec cela n'importe qui pourrait se connecter à la base et faire n'importe quoi dedans.

    L'architecture à recommander est de mettre la partie métier/service sur un serveur d'application (un tomcat fera l'affaire), puis de mettre à disposition les diverses actions possibles sous forme de WebServices ou encore d'EJB. Et de ne permettre la connexion à la base de données que depuis ce serveur (et pour les DBA et développeurs bien sûr).

    Le client lourd devra lui appeler les WebServices (ou EJB) disponibles sur le serveur pour réaliser les diverses actions dont il a besoin.

    Donner un accès direct à la base de données à n'importe quel utilisateur est une faille de sécurité.

Discussions similaires

  1. Recherche sources JSF + Spring 3 + Hibernate / JPA
    Par pschiit dans le forum Spring
    Réponses: 2
    Dernier message: 28/11/2012, 15h09
  2. [Data] Spring hibernate JPA : second level cache
    Par nahtanojb dans le forum Spring
    Réponses: 0
    Dernier message: 11/04/2010, 18h32
  3. [Batch] Spring Batch + Hibernate JPA + Oracle
    Par spaw3003 dans le forum Spring
    Réponses: 1
    Dernier message: 09/03/2010, 17h28
  4. Réponses: 0
    Dernier message: 03/12/2008, 10h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo