2010-09-13 15 views
6

Oczywiście używając bezpaństwowców fasoli EJB w jednostce fasola pachnie, ale proszę wziąć pod uwagę scenariusz, w następujący sposób i powiedz mi, czy znasz lepsze rozwiązanie:Korzystanie bezpaństwowców fasoli EJB w Entity Bean

  1. Mam InvoiceTemplate Entity Bean z pola NextInvoiceDate
  2. Generowanie NextInvoiceDate to skomplikowana procedura i powinny być wykonywane poza klasą InvoiceTemplate
  3. NextInvoiceDate powinny być aktualizowane za każdym razem InvoiceTemplate jest przechowywany w db

Na razie mam logiki dotyczące generacji NextInvoiceDate w @PrePersist@PreUpdate methon w InvoiceTemplate podmiot fasoli. Logika staje się coraz bardziej skomplikowana i chcę ją przenieść poza komponent bean encji InvoiceTemplate. Wydaje mi się, że powinna istnieć usługa obliczania NextInvoiceDate. Ale czy słuszne jest wywoływanie tej usługi z wnętrza InvoiceTemplate?

+0

jest to komponent bean entity (EJB 2.0) lub podmiot JPA? – Bozho

+0

@Bozho, to jednostka JPA – mgamer

Odpowiedz

3

To nie jest taki zapach - to chudy projekt oparty na domenie.

ja nie znam żadnego sposobu, aby to zrobić automatycznie, ale można:

  • w ziarnach sesyjnych gdzie obsługiwać Invoicetemplate, wstrzyknąć fasoli pomocnika, który ma logiki, aby obliczyć następną datę
  • utworzyć prywatną pola z seter na jednostkę, a przed rozpoczęciem korzystania wywoła entity.setNextDateHelper(..)

można również sprawdzić, czy AspectJ nie oferuje kilka opcji EJB, dzięki czemu można wstrzykiwać t on EJB, gdy tworzony jest podmiot danego typu (InvoiceTemplate). AspectJ działa tak z fasolą wiosenną, nie wiem, czy istnieją takie opcje dla EJB.

+0

Dobrze powiedziane. +1 tylko dla pierwszego zdania. –

0

Potrzebujesz czegoś tak skomplikowanego jak usługa lub EJB? Czy możesz po prostu napisać metodę statyczną (prawdopodobnie na klasie narzędziowej), aby utrzymać logikę? Zwykle jestem bardzo stronniczy od tego rodzaju rzeczy, ale jeśli masz tylko złożoną logikę, która nie wymaga interakcji z bazą danych lub współpracy z wieloma obiektami, może to być najczystsze podejście.

+0

Testowanie będzie bolało w ten sposób. – mgamer

+1

No cóż, jeśli to wymaga interakcji z DB i współpracy z wieloma obiektami? – musiKk

+1

Jeśli tak, to prawdopodobnie powrócisz do usługi lub EJB ponownie, aby móc uczestniczyć w transakcjach lub udostępniać kontekst. Który sprowadza cię z powrotem do kwestii czasowych, koordynacji i zależności. – TMN

Powiązane problemy