[jboss-user] [J2EE Design Patterns] - newb EJB 3 Design Pattern question
sunsh!ne
do-not-reply at jboss.com
Wed Aug 2 11:21:24 EDT 2006
My question revolves around remote interfaces and using the persistence API. An example might give more insight into my question?
I have 3 tables Customer, Order, LineItem with the corresponding object associations:
| class Customer {
|
| long id;
| List<Order> orders;
|
| public long getId() {};
| public List<Order> getOrders(){};
| }
|
| class Order {
|
| long id;
| List<LineItem> lineItems;
|
| public long getId() {};
| public List<LineItem> getLineItems() {};
| public Customer getCustomer() {};
| }
|
| Class LineItem {
|
| long id;
|
| public long getId() {};
| public Order getOrder() {};
| }
|
When using a session bean that implements a remote interface I make a call similar to the following?
| @Stateless
| class OrderBean implements RemoteOrder {
|
| public List<Order> getOrders(long custId) {
| return em.createNamedQuery(?order.findByCustomerId?)
| .setParmater(?custId?, custId)
| .getResultList();
| }
| }
|
1)
Now this would work great in a Servlet/JSP that was running in the same JVM, but I am accessing this from a web service. I am wondering what is the ?standard? way to return the persistent data to the web service client? Is it off load everything into value objects? Something has to be done otherwise I will always get exceptions when trying to access the lazy children of Customer. Even if I do a FETCH JOIN for Customer.orders then the problem nest down to Order.lineItems, should I FETCH JOIN this to?
2)
What about the cyclic call during marhsalling from Customer.getOrders() then Orders.getCustomers()? I have yet to find documentation ?anywhere? ;) that defines a standard way to handle this or should we still develop the J2EE way and use Transfer Objects (J2EE design Pattern), but I thought the persistence layer and POJOs was supposed to remove this extra layer from the enterprise application.
3)
If the Order Pojo had some header information an thats all I needed for a particluar web service request, meaning I do not want the lineitems, should I create another pojo object mapped to the table but with only the fields that represent the header? Should I create a Transfer Object/Value Object?
I guess I am some confused of when or if I should use the Pojo when returning data for remote calls. I have read the J2EE Design Patterns and maybe those Patterns still apply I just thought that pojos where supposed to take place of value and transfer objects.
Thanks for any help :)
J
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3962499#3962499
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3962499
More information about the jboss-user
mailing list