2010-09-13 6 views
6

De toute évidence à l'aide des haricots EJB sans état dans une entité sent haricot, mais s'il vous plaît envisager un scénario comme suit et me dire si vous connaissez une meilleure solution:Utiliser les haricots EJB sans état dans un Bean Entité

  1. J'ai un InvoiceTemplate entité Bean avec le champ NextInvoiceDate
  2. Génération NextInvoiceDate est une procédure complexe et doit être effectuée en dehors de la classe InvoiceTemplate
  3. NextInvoiceDate devrait être mis à jour chaque fois InvoiceTemplate est stocké à la db

Pour l'instant j'ai logique en ce qui concerne la génération de NextInvoiceDate dans @PrePersist@PreUpdate Methon dans InvoiceTemplate bean entité. La logique devient de plus en plus compliquée et je veux la déplacer en dehors du bean entité InvoiceTemplate. Il me semble qu'il devrait y avoir un service pour calculer NextInvoiceDate. Mais alors est-il juste d'invoquer ce service de l'intérieur de InvoiceTemplate?

+0

est-ce un entity-bean (EJB 2.0) ou une entité JPA? – Bozho

+0

@Bozho, c'est une entité JPA – mgamer

Répondre

3

Ce n'est pas une telle odeur - c'est un penchant pour la conception axée sur le domaine.

Je ne sais pas de toute façon de le faire automatiquement, mais vous pouvez:

  • dans les grains de session où vous gérer votre Invoicetemplate, injecter le haricot d'aide qui a la logique pour calculer la date suivante
  • créer un champ privé avec un setter sur l'entité, et avant de commencer à l'utiliser appelez entity.setNextDateHelper(..)

vous pouvez également vérifier si AspectJ ne propose pas certaines options EJB afin que vous puissiez injecter t EJB chaque fois qu'une entité d'un type donné (InvoiceTemplate) est créée. AspectJ fonctionne comme ça avec les haricots de printemps, je ne sais pas s'il existe de telles options pour EJB.

+0

Bien dit. +1 juste pour la première phrase. –

0

Avez-vous besoin de quelque chose d'aussi compliqué qu'un service ou un EJB? Pouvez-vous juste écrire une méthode statique (éventuellement sur une classe d'utilité) pour maintenir la logique? Normalement, je suis assez partial contre ce genre de choses, mais si vous n'avez qu'une logique complexe qui ne nécessite aucune interaction DB ou beaucoup de collaboration d'objet, c'est peut-être l'approche la plus propre.

+0

Les tests seraient blessés de cette manière. – mgamer

+1

Eh bien, que se passe-t-il si _does_ nécessite une interaction DB et beaucoup de collaboration d'objet? – musiKk

+1

Si c'est le cas, vous revenez probablement à un service ou à un EJB pour pouvoir participer à des transactions ou partager un contexte. Ce qui vous ramène aux problèmes de timing, de coordination et de dépendances. – TMN

Questions connexes