JPA org.hibernate.AnnotationException: Unknown Id.generator:

Si, comme moi, vous avez ce genre chose dans votre code:

1
2
3
4
5
6
7
@Entity
@Table(name="MyType")
public class MyType {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MyType_SEQ")
    @Column(name = "MyType_ID")
    private Long id;

Et que vous êtes accueilli par un joli

1
2
3
4
5
6
7
8
org.hibernate.AnnotationException: Unknown Id.generator: MyType_SEQ
    at org.hibernate.cfg.BinderHelper.makeIdGenerator(BinderHelper.java:392)
    at org.hibernate.cfg.AnnotationBinder.bindId(AnnotationBinder.java:1719)
    at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1171)
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:706)
    at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:452)
    at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:268)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1305)

Sachez, qu’il faut simplement définir la séquence avec l’annotation SequenceGenerator

1
2
3
4
5
6
7
8
@Entity
@Table(name="MyType")
public class MyType {
    @Id
    @SequenceGenerator(name="masequence", sequenceName="MyType_SEQ")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "masequence")
    @Column(name = "MyType_ID")
    private Long id;

System.exit et test unitaire

Comme beaucoup de « bons » programmeurs, vous prenez soins d’écrire des tests unitaires pour vos applications. vous vous assurez qu’elle a toujours le comportement attendu. Et puis un jour, c’est le drame, il faut tester

Si le fichier de configuration est incorrect, l’application retourne -1, si une erreur inconnue se produit, elle retourne -2 et si tout se passe bien, elle retourne 0.

Mais comment faire? En effet, si on laisse ceci se produire, le test s’arrête, l’intégrateur maven ne comprend plus rien et des pandas sont morts.
Lire la suite

Transférer une authentification jaas de JBOSS AS 7 vers des services tiers

Avec la complexification des applications en entreprise, il arrive de plus en plus souvent que vos applications web soient juste des interfaces vers des services tiers. Pour accéder à ces services, votre application doit pouvoir être identifiée par ce service et les « credentials » de votre utilisateur transféré à cette application. Il existe des solutions d’entreprise destinées à cela. Vous pouvez par exemple faire de vos applications tierces des EJB remote appartenant au même domaine de sécurité dans JBOSS. Et acheter un corde si c’est votre première expérience dans ce domaine. :) Vous pouvez aussi mettre en place un serveur Kerberos et utiliser des tickets kerberos. Et acheter un 9mm si vous n’avez aucune expérience là dedans. Vous pouvez aussi laisser le service tiers faire une « totale confiance » en votre interface et ne faire aucune authentification. Là, c’est votre responsable sécurité qui appuiera pour vous sur la détente du 9mm!

Je vous propose ici une solution simple qui transfère le user/pass de l’utilisateur courant vers les autres applications. La technique est connue et vieille comme le web, je vous explique simplement comment la mettre en œuvre dans le cadre de JBOSS AS 7.

Lire la suite

Supplique aux enseignants

Chers enseignants,

j’ai le plus grand respect pour votre travail de recherche et votre dévouement à l’enseignement de vos connaissances. Vous faites un travail important, et bien souvent très mal payé. C’est avec tout ce respect et la gratitude pour l’enseignement dont j’ai bénéficié que je vous demande, aujourd’hui, de bien vouloir lire ce message qui vous est destiné et de le prendre avec toute la considération due lors de votre enseignement du langage Java.

Lire la suite

ThreadLocal, partie 1, principes du stockage magique

Dans l’API java, on trouve une classe au comportement tout a fait particulier, ThreadLocal. Son principe: stocker des données dans le Thread courant afin de les récupérer plus tard, dans une autre méthode par exemple, sans avoir à les passer en argument à toute la chaine d’appel. Cette classe peut vous être d’un grand secours, mais elle doit être utilisée judicieusement et surtout en extrêmement précautionneusement!
Lire la suite

Obtenir l’ip de la machine

Question simple et pourtant vaste que voilà. Comment obtenir le nom et l’adresse ip de la machine sur laquelle tourne votre application java? Sous son aspect simple dans l’énoncé se cachent en fait une multitude de possibilités. Comment définissez vous « l’adresse ip » de la machine? Une IPv4 ou une IPv6? Une ip locale ou une ip telle que vue par vos clients?

Lire la suite

Améliorer le rendu de JavaHelp

Si, comme moi, vous avez déjà du réaliser des fichiers d’aide, vous êtes surement tombé sur la spécification JavaHelp (version 1.0 et version 2.0). Vous avez probablement immédiatement apprécié son intégration à Swing, son support pour l’internationalisation, l’indexation, la possibilité de réaliser vos fichiers d’aide en pur HTML, de pouvoir fusionner des fichiers d’aide au vol et la possibilité de mise à jour par réseau de ces fichiers.

Et puis, après quelques essais, vous avez déchanté. Vous avez vu à quoi ressemblait un ficher HTML affiché avec JavaHelp et vous avez vraiment hésité avant d’intégrer cette technologie dans votre application. Parce que, il faut vraiment l’admettre, malgré toutes ses promesses, JavaHelp a visuellement l’air coincé dans les années 1990!
Lire la suite

Devinette sur les ThreadLocal

Avant la parution d’une série d’articles sur la classe ThreadLocal, je vous propose une série de 5 petites devinettes java (des javanettes on va dire), sur un même code. Une connaissance poussée de java et de la classe ThreadLocal peut-être nécessaire pour trouver les solutions et surtout les justifier, mais c’est aussi l’occasion de découvrir, qui sait, les dessous d’une classe méconnue. N’hésitez pas à poster vos idées de réponses sous forme de commentaires.
Lire la suite