Communication avec un broker de message

L’instance “prsdev” de votre SIM est sur la branche “release” (ce qui correspond à l’image Docker “latest”).

> sim get prsdev
prsdev                    4.0r  started    CLI        2020-03-13 2020-05-04 02:10:15  U S P https://prsdev.renault.simplicite.io

Elle est en autoupgrade et a donc été mise à jour cette nuit

Parfait merci! Je testerai ça demain matin.

Bonjour,
je teste en ce moment sur l’insance prsdev.renault. … un simple :

import org.apache.qpid.*;

Mais il me dit que ce package n’existe pas. Est-ce la manière que vous avez testé dans votre exemple plus haut?

Quelle est votre version/révision ?

Le health :

[Platform]
Status=OK
Version=4.0.P24
BuiltOn=2020-05-03 22:26 (revision 7bb0392e2229c8434cc4d444dc9b099f6a944b87)
Encoding=UTF-8
EndpointIP=149.202.171.75
EndpointURL=http://renault.simplicite.io:10338
TimeZone=Europe/Paris
SystemDate=2020-05-05 10:13:19

[Application]
ApplicationVersion=4.0
ContextPath=
ContextURL=https://prsdev.renault.simplicite.io
ActiveSessions=1
TotalUsers=4
EnabledUsers=3
LastLoginDate=

[Server]
ServerInfo=Apache Tomcat/9.0.34
ServerType=WEB
User=prsdev

[OS]
Name=Linux
Architecture=amd64
Version=3.10.0-1062.18.1.el7.x86_64
SystemEncoding=UTF-8

[Disk]
DiskFree=18595
DiskUsable=16486
DiskTotal=50286

[JavaVM]
Version=13.0.2
Vendor=N/A
VMName=OpenJDK 64-Bit Server VM
VMVersion=13.0.2+8
ScriptEngine=rhino
ScriptEngineVersion=Rhino 1.7.11 2019 05 30
HeapFree=175003
HeapSize=524288
HeapMaxSize=524288
TotalFreeSize=175003

[Cache]
GrantCache=18
GrantCacheMax=0
GrantCacheRatio=0
ObjectCache=194
ObjectCacheMax=10000
ObjectCacheRatio=1
ProcessCache=1
ProcessCacheMax=10000
ProcessCacheRatio=0

[Database]
Vendor=1
ProductName=HSQL Database Engine
ProductVersion=2.5.0
DriverName=HSQL Database Engine Driver
DriverVersion=2.5.0
DBDate=2020-05-05 10:13:19.028000+2:00
DBDateOffset=0
DBPatchLevel=P24;7bb0392e2229c8434cc4d444dc9b099f6a944b87
UsingBLOBs=false

[Healthcheck]
Date=2020-05-05 10:13:19
ElapsedTime=3

Effectivement il y a eu un raté de backport entre prerelease et release, je suis en train de rebuilder je vous dit quand c’est bon

Ok pas de soucis! J’attends la màj

J’ai upgradé votre instance “prsdev”. Dites moi si c’est bon.

Ca fonctionne! Merci !

1 Like

Bonjour,

En ce qui concerne la lib javax.jms, avez intégré l’ensemble (javax.jms.*) ou seulement les dependance finales : javax.jms.Connection… ?

On a ajouté cette dépendance :

    <dependency>
      <groupId>javax.jms</groupId>
      <artifactId>javax.jms-api</artifactId>
      <version>[2.0,)</version>
    </dependency>

PS: Le repos Maven de l’instance est sur /maven, vous y trouverez les libs embarquées par cette instance

Parfait, je regarde tout de suite

Vous rencontrez un pb ? Si oui lequel (logs, etc.) ?

Pour javax.jms en fait c’est bon ça fonctionne bien (j’ai simplement fait un import javax.jms.* pour être sûr d’embarquer toutes les dépendances).
Sinon j’ai échangé avec l’équipe Renault en charge du broker, ils m’ont fourni un code “template” qui utilise : “org.java.qpid.jms.JmsConnectionFactory” mais ça ne fonctionne pas. Apparemment c’est normal, ce package a été déplacé. C’est donc leur code qui n’est pas à jour.

Pour QPID il y a plusieurs générations de libs, cf. le début de nos échanges.

Là j’ai mis la version qui correspondait à votre code, leur code correspond peut être à d’autres versions plus anciennes ou plus récentes…

Franchement, le plus simple c’est qu’ils disent quelles dépendances Maven/Graddle exactes ils utilisent/préconisent, on perdra moins de temps à essayer de les deviner !

Bonjour,

J’ai enfin eu le temps de faire quelques tests, il semblerai qu’il faille ajouter la dépendance QpidJMS Client comment nous l’avions discuté au départ.
J’ai testé avec la dernière version de cette lib dans un environnement Eclipse et ça fonctionne.

Désolé pour le retard de ma réponse

OK, comme demandé 3 fois précédemment, je voudrais avoir la liste des dependances que vous utilisez afin de ne pas perdre une 2ème du temps à intégrer une librairie qui n’est pas celle dont vous avez besoin (je rappelle tout de même que ce qu’on a intégré correspondait au code que vous aviez fourni à titre d’exemple, j’imagine donc que cet exemple n’était pas le bon…)

Java est un monde complexe où tout librairie dépend d’une grappe d’autres libs. On ne peut pas juste dire je veux la lib “toto”, il faut indiquer la liste minimale des dépendances requises par cette lib “toto”.

Cela permet de s’assurer de ne rien oublier et surtout de vérifier qu’il n’y a pas d’incompatibilité avec les nombreuses libs déjà embarquées dans Simplicité.

Copiez collez aussi le code que vous utilisez histoire d’avoir un exemple pour tester

Voici le code :

import java.io.IOException;
import java.util.UUID;

import javax.jms.BytesMessage;
import javax.jms.Destination;
import javax.jms.JMSContext;
import javax.jms.JMSException;
import javax.jms.JMSProducer;

import org.apache.qpid.jms.JmsConnectionFactory;
import org.json.JSONException;

public class App {
    private static final String URL = "amqps://localhost:5671";
    private static final String USERNAME = "default";
    private static final String PASSWORD = "default";
    private static final String TOPIC = "test/mytopic";
    private static final DeliveryMode DELIVERY_MODE = DeliveryMode.NON_PERSISTENT;
    private static final int MESSAGES_NUMBER = 10;
    private static final String MESSAGE_CONTENT = "{key: value}";
    private static final int QOS = 0;
    private static final String CLIENT_ID = App.class.getName() + "-" + UUID.randomUUID().toString();
    
public static void main(String[] args) {
JmsConnectionFactory connectionFactory = null;
try {
connectionFactory = new JmsConnectionFactory(USERNAME, PASSWORD, URL);
} catch (Exception e ) {
System.out.println("Error with the connection");
return;
}

       connectionFactory.setClientID(CLIENT_ID);
       try (JMSContext jmsContext = connectionFactory.createContext()) {
           JMSProducer producer = jmsContext.createProducer().setDeliveryMode(DELIVERY_MODE.getValue());
           Destination destination = jmsContext.createTopic(TOPIC);

           BytesMessage message = jmsContext.createBytesMessage();
           message.writeBytes(MESSAGE_CONTENT.getBytes());
           for (int i = 0; i < MESSAGES_NUMBER; i++) {
               producer.send(destination, message);
           }
           System.out.println("Sent " + MESSAGES_NUMBER + " messages");
       } catch (Exception e) {
System.out.println("Error sending");
return;
       }
}
public enum DeliveryMode {
        NON_PERSISTENT(1),
        PERSISTENT(2);

        int value;

        DeliveryMode(int value) {
            this.value = value;
        }
        public int getValue() {
            return value;
        }
    }
}

J’avoue avoir du mal à comprendre les difficultés qu’il y a à intégrer une librairie, maven est justement là pour ça…
Voici ce qu’il faut ajouter au pom.xml pour que ça fonctionne :

<!-- https://mvnrepository.com/artifact/org.apache.qpid/qpid-jms-client -->
<dependency>
    <groupId>org.apache.qpid</groupId>
    <artifactId>qpid-jms-client</artifactId>
    <version>0.51.0</version>
</dependency>

Il n’y a pas de difficulté mais un besoin de s’assurer de la compatibilité des dépendances avec les autres dépendances de Simplicité, de faire des tests de non régression, de faire du packaging et du delivery de la plateforme. Au final c’est une charge de travail relativement importante, donc on a besoin de d’être sûr que ce qu’on intègre correspond bien à ce dont vous avez besoin.

Merci donc de me fournir le fichierpom.xml complet de votre test histoire que je m’assure qu’il n’y a pas d’autres choses.

Voici le pom :

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>Test</groupId>
<artifactId>TestQPID</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>TestQPID</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

<dependencies>

<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-api</artifactId>
<version>[2.0,)</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.qpid/qpid-jms-client -->
<dependency>
   <groupId>org.apache.qpid</groupId>
   <artifactId>qpid-jms-client</artifactId>
   <version>0.51.0</version>
</dependency>


</dependencies>
</project>