Configurer Retrofit ssl avec un jks

Ajouts des dependences maven :

Voici la classe de config :

Read More

Ajouter @Autowired au constructeur générer par lombok

Read More

DB2 suppression d’une clonne

Lorsqu’on execute une requete de supression de colonne sur l’as400

Il est possible que l’as400 nous renvoie une erreur car nous n’avons pas la permission de supprimer une colonne.
Il suffit d’ajouter l’instruction suivante pour obtenir les droits :

Read More

Gestion des certificats auto-signés

Récupération d’un certificat

Avec OpenSSL

Aprés avoir installé et lancé le programme, on peut récupérer des certificats pour différents protocoles :

http

s_client -connect smtp.gmail.com:465

ftp avec tls

s_client -connect qlf-ftpssl.pci.aw.atosorigin.com:20001 -starttls ftp

smtp avec tls

s_client -connect smtp.gmail.com:587 -starttls smtp

Création du certificat crt

Après avoir exécuté la commande, il faut copier les lignes depuis la ligne BEGIN CERTIFICATE (comprise) jusqu’à la ligne (END CERTIFICATE) puis un saut de ligne.

Il faut ensuite convertir le fichier obtenu en UTF-8 vec Notepad++.

Génération d’un keyStore Java (JKS)

C:\Program Files\Java\jdk1.8.0_121\bin>keytool -importcert
-trustcacerts -alias intermediate -file C:\FTP\myCert.crt
-keystore C:\FTP\keystore.jks

Lister les certificats présents dans un keyStore

keytool -v -list -keystore keystore.jks

Ajouter un certificat à un keyStore existant

keytool -import -alias "myCert" -file myCert.crt -keystore keystore.jks
 

Chargement du fichier JKS dans un objet KeyStore

KeyStore ks = KeyStore.getInstance("JKS");
Resource jks = new ClassPathResource("keystore.jks");
ks.load(jks.getInputStream(), "password_choisi_lors_de_la_creation_du_jks".toCharArray());

Utilisation avec RestTemplate pour des connexions SSL en REST

@Bean
public RestTemplate restTemplate() throws Exception {
    KeyStore ks = ...
    SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
        new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
            .loadKeyMaterial(ks, passwordJks.toCharArray()).build(), NoopHostnameVerifier.INSTANCE);
    HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build();
    ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
    return new RestTemplate(requestFactory);
}

Read More

JUNIT tester les log d’erreur

Il peut arriver des situations, ou l’on a envie de s’assurer qu’un log.error() est bien effectué lorsqu’on rentre dans une condition.

Exemple de classe à tester :

Et dans le teste on peut tester cela comme ceci :

 

Read More

Réduire le temps de build maven

L’idée serait de détecter les modules maven impactés par les modifications. Puis de builder ces modules ainsi que les modules qui dépendent de celui-ci au sein du même repo. C’est possible à l’aide des arguments pl et -amd (-also-make-dependents)
exemple:
mvn install -pl artemis-javalib-impayes,artemis-javalib-common -amd

Pour avoir tous les fichiers changés dans une branche

Pour avoir tous les modules de premier niveau

Pour builder

2 problèmes :
seul le premier niveau est pris en compte
le module maven doit avoir le même nom que le dossier du module

plugin maven qui pourrait permettre d’identifier les modules affectés par une modif:
https://github.com/lesfurets/partial-build-plugin

Read More

Mapper une liste de DTO avec mapstruct

Imaginons que nous avons une entité « phone » avec un shemas strucuturé et un phoneDto qui met à plat cette donnée.

Si on veut pouvoir mapper proprement avec mapstruct on peut faire comme ceci :

Un PhoneMapper

 

ensuite on peut réutiliser dans un autre mapper, par exemple CustomerMapper

Après on peut tester ça très rapidement avec assertj.

 

Bonne chance

Read More

Lancer tomcat en debug

Souvent il m’arrive d’avoir a me connecter en debug sur la plateforme de recette.

Dans mon cas la machine est sous windows,

dans tomcat/bin, copier/coller startup.bat en debug.bat

modifier le fichier,

après la ligne :

set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"

ajouter :

set JAVA_OPTS=%JAVA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

Read More

Faire une recherche case insensitive mariadb

Parfois il nous arrive de vouloir faire une recherche sur un champ en ignorant la case.

La mauvaise façon de le faire serait :

SELECT * FROM table WHERE upper(champ) = upper(‘morgan’);

Faire ceci est catastrophique en terme de performance, et en plus, si jamais on met un index sur le champ, il ne pourra pas fonctionner car les index sont sensible a la case.

Heureusement les sgbd modernes viennent avec des solutions. Pour mariaDB/Mysql on peut simplement utiliser un collate différent. Les collates finissant par _bin sont case sensitive et _ci sont case insensitive.

SELECT * FROM table WHERE champ = ‘morgan’ COLLATE utf8mb4_unicode_ci;

 

 

Read More

Release d’une librairie au file de l’eau pour jenkins et maven

En ce moment je suis sur des problèmatiques de release avec mon projet maven.

Je voudrais que mon job jenkins soit capable de releaser automatiquement une version et mettre à jour les projets qui l’utilise comme dépendance.

Pour cela il y a deux petites commandes cli très utile. Mais d’abord, étudions comment structurer sont pom.xml

<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>com.wps.invoicing</groupId>
<artifactId>mp-invoicing</artifactId>
<version>6.1.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Marketplace Invoicing</name>
<url>http://maven.apache.org</url>

<properties>
<majeur.version>6.1</artemis.version>
<patch.version>1</patch.version>
</properties>
</project>

Ici, la version majeur est variabilité et ne seras changé que sur les branches de releases. Par contre, la version patch va être incrémenter programmatiquement via le JenkinsFile.

 

Première commande, mettre le projet en version définitive :

puis commiter les changements

Ensuite, il faut deploy la version sur nexus.

Maintenant que notre version N a été publier, il ne reste plus qu’a incrémenter la version patch.

Ensuite, il faut updater la propriété (toujours dans le jenkinsFile)

Puis créer la nouvelle version snapshot, commit et deploy pour que tous les nouveaux projet l’ai

Read More