Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1312 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JMS] Quels Jars pour JMS ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JMS] Quels Jars pour JMS ?

n°1908323
LeRiton
Posté le 24-07-2009 à 14:54:29  profilanswer
 

Bonjour à tous,
 
Je suis sur un petit client Java qui envoie des messages sur une file JMS d'un serveur JBoss 5 (donc JMS 1.1, JBoss Messaging 1.4).
 
La méthode décrite dans ce cas, c'est d'inclure au classpath une quarantaine de jar client, comme ça on est tranquilles. Vu que ça me plait que moyennement, je veux faire le ménage parmi les jars utilisés, et je me pète des NoClassDefFound depuis 3 jours à force d'essais.
 
Le code tout simple :

Code :
  1. public class MyJmsClient {
  2.  
  3.     private ConnectionFactory factory;
  4.     private Queue queue;
  5.     private Connection connection;
  6.  
  7.     public MyJmsClient(final Properties properties) {
  8.         try {
  9.             final InitialContext context = new InitialContext(properties);
  10.             this.factory = (ConnectionFactory) context.lookup(properties.getProperty("jms.out.factory" ));
  11.             this.queue = (Queue) context.lookup(properties.getProperty("jms.out.queue" ));
  12.             try {
  13.                 this.connection = this.factory.createConnection();
  14.             } catch (final JMSException e) {
  15.                 MY_LOGGER.fatal("Error while trying to create JMS connection.", e);
  16.                 System.exit(-1);
  17.             }
  18.         } catch (final NamingException e) {
  19.             MY_LOGGER.fatal("Naming error for JMS client.", e);
  20.             System.exit(-1);
  21.         }
  22.     }
  23.  
  24.     public void sendMessageToService(final MyObject object) {
  25.         Session session = null;
  26.         try {
  27.             session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  28.             final MessageProducer sender = session.createProducer(this.queue);
  29.             final MapMessage messageToSend = session.createMapMessage();
  30.             // Je construis mon message
  31.             sender.send(messageToSend);
  32.         } catch (final JMSException e) {
  33.             MY_LOGGER.error("Error while sendind message " + message + " to JMS queue.", e);
  34.         } finally {
  35.             try {
  36.                 session.close();
  37.             } catch (final NullPointerException e) {
  38.                 MY_LOGGER.error("No session to close on JMS connection.", e);
  39.             } catch (final JMSException e) {
  40.                 MY_LOGGER.error("Error while trying to close JMS session.", e);
  41.             }
  42.         }
  43.     }


 
Une idée de la façon dont je pourrais procéder ? C'est l'usage de trainer 6Mo de Jar pour ça  [:pingouino dei]  
 
En sus, même en procédant de cette manière, j'ai quand même des dépendances manquantes. Je peux trouver les jars concernés, c'est pas le problème, mais y'a rien d'écrit ou d'automatisé pour savoir quoi inclure à quel moment pour le messaging ?
 
Merci d'avance  [:petrus75]

mood
Publicité
Posté le 24-07-2009 à 14:54:29  profilanswer
 

n°1908503
bugsan
Posté le 25-07-2009 à 12:46:48  profilanswer
 

Utilise le framework spring + maven2, tu te prendras moins la tete :
 
pom.xml

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jms</artifactId>
    <version>2.5.6</version>
</dependency>
<dependency>
    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-jms_1.1_spec</artifactId>
    <version>1.1.1</version>
</dependency>


Ce qui importe 1,8Mo de jar :

  • spring-jms-2.5.6.jar
  • commons-logging-1.1.1.jar
  • commons-pool-1.3.jar
  • spring-beans-2.5.6.jar
  • spring-core-2.5.6.jar
  • spring-context-2.5.6.jar
  • aopalliance-1.0.jar
  • spring-context-support-2.5.6.jar
  • spring-tx-2.5.6.jar
  • geronimo-jms_1.1_spec-1.1.1.jar


SampleDao.java

Code :
  1. public interface SampleDao {
  2.     void envoyer(MyObject object);
  3. }


 
SampleJMS.java

Code :
  1. public class SampleJMS implements SampleDao {
  2.     private JmsOperations jms;
  3.     private String queueName;
  4.     public void setConnectionFactory(ConnectionFactory connectionFactory) {
  5.         this.jms = new JmsTemplate(connectionFactory);
  6.     }
  7.     public void setQueueName(String queueName) {
  8.         this.queueName = queueName;
  9.     }
  10.     public void envoyer(MyObject object) {
  11.         jms.convertAndSend(queueName, object);
  12.     }
  13. }


 
applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/jee
        http://www.springframework.org/schema/jee/spring-jee.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
 
    <context:property-placeholder location="classpath:/jms.properties" />
   
    <jee:jndi-lookup id="connectionFactory" jndi-name="${jms.out.factory}" />
 
    <bean id="sampleDao" class="org.tuto.domain.dao.jms.SampleJMS">
        <property name="connectionFactory" ref="connectionFactory" />
        <property name="queueName" value="${jms.out.queue}" />
    </bean>
 
</beans>


 
Main.java

Code :
  1. public static void main(String[] args) {
  2.     ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml" );
  3.     SampleDao dao = (SampleDao) ctx.getBean("sampleDao" );
  4.     dao.envoyer(new MyObject());
  5. }


Message édité par bugsan le 25-07-2009 à 12:58:21
n°1908707
LeRiton
Posté le 27-07-2009 à 08:08:07  profilanswer
 

Non, merci [:petrus75]
 
De plus, c'est un client Java pur sur lequel je suis là.

n°1909188
bugsan
Posté le 28-07-2009 à 01:32:09  profilanswer
 

Ya du java impur ?
Qu'est ce qui t'empêches d'utiliser le JmsTemplate ? Tu es prêt à ajouter 8mo de jar jms (impur?), mais pas spring... comprend pas.


Message édité par bugsan le 28-07-2009 à 01:35:25
n°1909208
LeRiton
Posté le 28-07-2009 à 08:28:23  profilanswer
 

Par Java pur, j'entends hors J2EE, aussi léger le framework soit-il.
Alors oui, en soit, les 2Mo de Spring font pas lourd vis-à-vis de mes 6Mo de dépendances, mais je vois aussi la maintenance du bouzin en face. Je suis clairement pas le seul à bosser dessus, on travaille pas avec Spring, et je vois pas de raisons de le faire juste pour mes cas de conscience sur le bilan carbone de ce bout de code.
L'idée c'était principalement de voir si j'avais un moyen d'épurer le truc, et éventuellement de comprendre pourquoi toutes les dépendances étaient requises pour chaque client.
 
Merci pour ta piste en tout cas.

n°1910504
bugsan
Posté le 31-07-2009 à 01:34:58  profilanswer
 

Tu n'as besoin que de l'api jms pour compiler ton code. Elle est fournit par ton container J2EE donc pas besoin de l'embarquer.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JMS] Quels Jars pour JMS ?

 

Sujets relatifs
Jboss JMSComment savoir quelles sont les jars utilisées par mon projet ?
[J2EE][JMS][MDB] envoyer des messages entre les utilisateurs.configurer Jboss pour JMS
[JAVA][JMS][JBOSS] The connection has already a clientIDvisibroker 5.2 : conflit de jars.
[jms] queue browsing "à l'envers" ?MIDP linux & JARs (résolu)
[JAVA] Packager un jar contenant des jars utilisant des jars , etc ...Comment charger des jars dynamiquement?
Plus de sujets relatifs à : [JMS] Quels Jars pour JMS ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR