Book:
package com.bookstore.entity; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="book") public class Book implements Serializable { private Integer book_id; private String bookname; private String author; private double price; private String bookimg; private String bookdesc; @Id @GeneratedValue public Integer getBook_id() { return book_id; } public void setBook_id(Integer book_id) { this.book_id = book_id; } public String getBookname() { return bookname; } public void setBookname(String bookname) { this.bookname = bookname; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getBookimg() { return bookimg; } public void setBookimg(String bookimg) { this.bookimg = bookimg; } public String getBookdesc() { return bookdesc; } public void setBookdesc(String bookdesc) { this.bookdesc = bookdesc; } }
Customer:
package com.bookstore.entity; import java.io.Serializable; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.OrderBy; import javax.persistence.Table; @Entity @Table(name="customer") public class Customer implements Serializable { private Integer customer_id; private String customer_name; private String password; private String email; private Set<Orders> orders=new HashSet<Orders>(); @Id @GeneratedValue public Integer getCustomer_id() { return customer_id; } public void setCustomer_id(Integer customer_id) { this.customer_id = customer_id; } @Column(name="customer_name",nullable=false,length=32) public String getCustomer_name() { return customer_name; } public void setCustomer_name(String customer_name) { this.customer_name = customer_name; } @Column(nullable=false,length=32) public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Column(nullable=false,length=32) public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @OneToMany(mappedBy="customer",cascade=CascadeType.ALL,fetch=FetchType.EAGER) @OrderBy(value="order_id") public Set<Orders> getOrders() { return orders; } public void setOrders(Set<Orders> orders) { this.orders = orders; } }
Orders:
package com.bookstore.entity; import java.io.Serializable; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.OrderBy; import javax.persistence.Table; @Entity @Table(name="orders") public class Orders implements Serializable { private Integer order_id; private Customer customer; private Set<OrderItem> orderItems=new HashSet<OrderItem>(); private double totalprice; @Id @GeneratedValue public Integer getOrder_id() { return order_id; } public void setOrder_id(Integer order_id) { this.order_id = order_id; } @ManyToOne(cascade=CascadeType.PERSIST,optional=false) @JoinColumn(name="customer_id") public Customer getCustomer() { return customer; } public void setCustomer(Customer customer) { this.customer = customer; } @OneToMany(mappedBy="orders",cascade=CascadeType.ALL,fetch=FetchType.EAGER) @OrderBy(value="orderItem_id") public Set<OrderItem> getOrderItems() { return orderItems; } public void setOrderItems(Set<OrderItem> orderItems) { this.orderItems = orderItems; } @Column(nullable=false) public double getTotalprice() { return totalprice; } public void setTotalprice(double totalprice) { this.totalprice = totalprice; } }
OrderItem
package com.bookstore.entity; import java.io.Serializable; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity @Table(name="orderItem") public class OrderItem implements Serializable { private Integer orderItem_id; private int quantity; private Orders orders; private Integer bookid; @Id @GeneratedValue public Integer getOrderItem_id() { return orderItem_id; } public void setOrderItem_id(Integer orderItem_id) { this.orderItem_id = orderItem_id; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } @ManyToOne(cascade=CascadeType.PERSIST,optional=false) @JoinColumn(name="order_id") public Orders getOrders() { return orders; } public void setOrders(Orders orders) { this.orders = orders; } @Column(nullable=false) public Integer getBookid() { return bookid; } public void setBookid(Integer bookid) { this.bookid = bookid; } }
数据库表:
mysql> desc book; +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | book_id | int(11) | NO | PRI | NULL | auto_increment | | bookname | varchar(255) | YES | | NULL | | | author | varchar(255) | YES | | NULL | | | price | double | NO | | NULL | | | bookimg | varchar(255) | YES | | NULL | | | bookdesc | varchar(255) | YES | | NULL | | +----------+--------------+------+-----+---------+----------------+ 6 rows in set (0.00 sec) mysql> desc customer; +---------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+---------+----------------+ | customer_id | int(11) | NO | PRI | NULL | auto_increment | | password | varchar(32) | NO | | NULL | | | customer_name | varchar(32) | NO | | NULL | | | email | varchar(32) | NO | | NULL | | +---------------+-------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec) mysql> desc orders; +-------------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+---------+------+-----+---------+----------------+ | order_id | int(11) | NO | PRI | NULL | auto_increment | | totalprice | double | NO | | NULL | | | customer_id | int(11) | NO | MUL | NULL | | +-------------+---------+------+-----+---------+----------------+ 3 rows in set (0.00 sec) mysql> desc orderitem; +--------------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------+------+-----+---------+----------------+ | orderItem_id | int(11) | NO | PRI | NULL | auto_increment | | quantity | int(11) | NO | | NULL | | | bookid | int(11) | NO | | NULL | | | order_id | int(11) | NO | MUL | NULL | | +--------------+---------+------+-----+---------+----------------+ 4 rows in set (0.02 sec)
保存方法:
public Book saveBook(Book book) { em.persist(book); System.out.println(book.getBookname()); return book; } public Customer saveCustomer(Customer customer) { em.persist(customer); System.out.println(customer.getCustomer_name()); return customer; } public Orders saveOrder(Orders order) { em.persist(order); System.out.println(order.getOrder_id()); return order; } public OrderItem saveOrderItem(OrderItem orderItem) { em.persist(orderItem); System.out.println(orderItem.getOrderItem_id()+"Orderitem"); return orderItem; }
单独保存Book和Customer可以。
但在客户端要保存Order,OrderItem该怎么办?
package com.bookstore.test; import java.util.HashSet; import java.util.List; import java.util.Properties; import java.util.Set; import javax.naming.InitialContext; import javax.naming.NamingException; import com.bookstore.dao.BookDAO; import com.bookstore.dao.CustomerDAO; import com.bookstore.dao.OrderDAO; import com.bookstore.dao.OrderItemDAO; import com.bookstore.entity.Book; import com.bookstore.entity.Customer; import com.bookstore.entity.OrderItem; import com.bookstore.entity.Orders; public class TestBookStore { /** * @param args * @throws NamingException */ public static void main(String[] args) throws NamingException { Properties props=new Properties(); props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory"); props.setProperty("java.naming.provider.url","localhost:1099"); props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming"); InitialContext context=new InitialContext(props); try{ /* BookDAO bdao=(BookDAO)context.lookup("BookDAOBean/remote"); Book b1=new Book(); b1.setAuthor("author1"); b1.setBookdesc("bookdesc1"); b1.setBookimg("b1 img"); b1.setBookname("bname1"); b1.setPrice(15); Book b2=new Book(); b2.setAuthor("author2"); b2.setBookdesc("bookdesc2"); b2.setBookimg("b2 img"); b2.setBookname("bname2"); b2.setPrice(15); Book b3=new Book(); b3.setAuthor("author3"); b3.setBookdesc("bookdesc3"); b3.setBookimg("b3 img"); b3.setBookname("bname3"); b3.setPrice(15); bdao.saveBook(b1); bdao.saveBook(b2); bdao.saveBook(b3); List<Book> lb=bdao.findBookAll(); for(Book b:lb){ System.out.println(b.getAuthor()+" "+b.getBookname()+" "+b.getBookdesc()+" "+b.getPrice()); } CustomerDAO cdao=(CustomerDAO)context.lookup("CustomerDAOBean/remote"); Customer c1=new Customer(); c1.setCustomer_name("persia"); c1.setEmail("cxccbv@163.com"); c1.setPassword("password1"); */ OrderDAO odao=(OrderDAO)context.lookup("OrderDAOBean/remote"); OrderItemDAO otdao=(OrderItemDAO)context.lookup("OrderItemDAOBean/remote"); Orders order1=new Orders(); OrderItem ot1=new OrderItem(); ot1.setBookid(new Integer(1)); // ot1.setOrders(order1); ot1.setQuantity(12); OrderItem ot2=new OrderItem(); ot2.setBookid(new Integer(2)); // ot2.setOrders(order1); ot2.setQuantity(15); Set set=new HashSet(); set.add(ot1); set.add(ot2); order1.setOrderItems(set); order1.setTotalprice(120d); odao.saveOrder(order1); // odao.saveOrder(order1); // otdao.saveOrderItem(ot1); // otdao.saveOrderItem(ot2); // Set orders=new HashSet(); // orders.add(order1); // c1.setOrders(orders); }catch(Exception e){ e.printStackTrace(); } } }
我用上面的代码尝试着保存,不成功。
java.lang.reflect.UndeclaredThrowableException at $Proxy0.saveOrder(Unknown Source) at com.bookstore.test.TestBookStore.main(TestBookStore.java:98) Caused by: java.lang.ClassNotFoundException: javax.persistence.PersistenceException at org.jboss.remoting.serialization.ClassLoaderUtility.loadClass(ClassLoaderUtility.java:82) at org.jboss.remoting.loading.RemotingClassLoader.loadClass(RemotingClassLoader.java:76) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:247) at org.jboss.remoting.loading.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:174) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObjectVersion2_2(JavaSerializationManager.java:239) at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:133) at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:120) at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedRead(MicroSocketClientInvoker.java:957) at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:586) at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122) at org.jboss.remoting.Client.invoke(Client.java:1634) at org.jboss.remoting.Client.invoke(Client.java:548) at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107) at $Proxy0.saveOrder(Unknown Source) at com.bookstore.test.TestBookStore.main(TestBookStore.java:98) at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107) ... 2 more
一对多和多对多在客户端如何保存?
这跟cascadeType是怎么个关系?
突破了这点,就是一个大的跃进。。。
package com.bookstore.test; import java.util.HashSet; import java.util.List; import java.util.Properties; import java.util.Set; import javax.naming.InitialContext; import javax.naming.NamingException; import com.bookstore.dao.BookDAO; import com.bookstore.dao.CustomerDAO; import com.bookstore.dao.OrderDAO; import com.bookstore.dao.OrderItemDAO; import com.bookstore.entity.Book; import com.bookstore.entity.Customer; import com.bookstore.entity.OrderItem; import com.bookstore.entity.Orders; public class TestBookStore { /** * @param args * @throws NamingException */ public static void main(String[] args) throws NamingException { Properties props=new Properties(); props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory"); props.setProperty("java.naming.provider.url","localhost:1099"); props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming"); InitialContext context=new InitialContext(props); try{ BookDAO bdao=(BookDAO)context.lookup("BookDAOBean/remote"); Book b1=new Book(); b1.setAuthor("author1"); b1.setBookdesc("bookdesc1"); b1.setBookimg("b1 img"); b1.setBookname("bname1"); b1.setPrice(15); Book b2=new Book(); b2.setAuthor("author2"); b2.setBookdesc("bookdesc2"); b2.setBookimg("b2 img"); b2.setBookname("bname2"); b2.setPrice(15); Book b3=new Book(); b3.setAuthor("author3"); b3.setBookdesc("bookdesc3"); b3.setBookimg("b3 img"); b3.setBookname("bname3"); b3.setPrice(15); bdao.saveBook(b1); bdao.saveBook(b2); bdao.saveBook(b3); List<Book> lb=bdao.findBookAll(); for(Book b:lb){ System.out.println(b.getAuthor()+" "+b.getBookname()+" "+b.getBookdesc()+" "+b.getPrice()); } CustomerDAO cdao=(CustomerDAO)context.lookup("CustomerDAOBean/remote"); Customer c1=new Customer(); c1.setCustomer_name("persia"); c1.setEmail("cxccbv@163.com"); c1.setPassword("password1"); cdao.saveCustomer(c1); List<Customer> lc=cdao.findCustomerByName("persia"); Customer c=lc.get(0); System.out.println("获取customer:"+c.getCustomer_name()); OrderDAO odao=(OrderDAO)context.lookup("OrderDAOBean/remote"); Orders order1=new Orders(); OrderItem ot1=new OrderItem(); ot1.setBookid(new Integer(1)); ot1.setOrders(order1); ot1.setQuantity(12); OrderItem ot2=new OrderItem(); ot2.setBookid(new Integer(2)); ot2.setOrders(order1); ot2.setQuantity(15); Set set=new HashSet(); set.add(ot1); set.add(ot2); order1.setOrderItems(set); order1.setTotalprice(120d); order1.setCustomer(c1); odao.saveOrder(order1); }catch(Exception e){ e.printStackTrace(); } } }
这样之后:
mysql> select * from orderitem; +--------------+----------+--------+----------+ | orderItem_id | quantity | bookid | order_id | +--------------+----------+--------+----------+ | 1 | 15 | 2 | 1 | | 2 | 12 | 1 | 1 | +--------------+----------+--------+----------+ 2 rows in set (0.00 sec) mysql> select * from orders; +----------+------------+-------------+ | order_id | totalprice | customer_id | +----------+------------+-------------+ | 1 | 120 | 2 | +----------+------------+-------------+ 1 row in set (0.00 sec) mysql> select * from customer; +-------------+-----------+----------------+---------------+ | customer_id | password | email | customer_name | +-------------+-----------+----------------+---------------+ | 1 | password1 | cxccbv@163.com | persia | | 2 | password1 | cxccbv@163.com | persia | +-------------+-----------+----------------+---------------+ 2 rows in set (0.00 sec) mysql> select * from book; +---------+----------+---------+-------+---------+-----------+ | book_id | bookname | author | price | bookimg | bookdesc | +---------+----------+---------+-------+---------+-----------+ | 1 | bname1 | author1 | 15 | b1 img | bookdesc1 | | 2 | bname2 | author2 | 15 | b2 img | bookdesc2 | | 3 | bname3 | author3 | 15 | b3 img | bookdesc3 | +---------+----------+---------+-------+---------+-----------+ 3 rows in set (0.00 sec)
customer重复了一个。。。。。
如果中间不保存customer,则customer是一个。
但是customer是先注册后再购物的,即使是注册时购物,再第二次购物时也会重复。
我估计问题在orders跟customer的cascade类型上。
但如果去掉order对customer的cascade:
author1 bname1 bookdesc1 15.0 author2 bname2 bookdesc2 15.0 author3 bname3 bookdesc3 15.0 java.lang.reflect.UndeclaredThrowableException at $Proxy2.saveOrder(Unknown Source) at com.bookstore.test.TestBookStore.main(TestBookStore.java:99) Caused by: java.lang.ClassNotFoundException: javax.persistence.PersistenceException at org.jboss.remoting.serialization.ClassLoaderUtility.loadClass(ClassLoaderUtility.java:82) at org.jboss.remoting.loading.RemotingClassLoader.loadClass(RemotingClassLoader.java:76) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:247) at org.jboss.remoting.loading.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:174) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObjectVersion2_2(JavaSerializationManager.java:239) at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:133) at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:120) at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedRead(MicroSocketClientInvoker.java:957) at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:586) at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122) at org.jboss.remoting.Client.invoke(Client.java:1634) at org.jboss.remoting.Client.invoke(Client.java:548) at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107) at $Proxy2.saveOrder(Unknown Source) at com.bookstore.test.TestBookStore.main(TestBookStore.java:99) at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107) ... 2 more