2015-06-12 52 views
0

我努力学习EJB 3,并在下文提到的情况,我现在无法弄清楚面临的一个问题。异常在EJB 3使用appclient罐子:javax.ejb.EJBException异常:java.rmi.MarshalException:

  1. 我有一个实体(书)来存储书的相关数据。
  2. 我已经创建了Stateless Bean和远程接口,并在glassfish 4中部署了该jar。
  3. 基本应用程序连接到主要方法,我需要使用appclient获取本书的详细信息。在这里,我收到一个错误“javax.ejb.EJBException:java.rmi.MarshalException:”

请查看下面的代码片段以获取更多详细信息。

Book.java:

package bookstore.model; 

import java.util.ArrayList; 
import java.util.List; 

import javax.persistence.CollectionTable; 
import javax.persistence.Column; 
import javax.persistence.ElementCollection; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.NamedQuery; 

@Entity 
@NamedQuery(name = "findAllBooks", query = "select b from Book b") 
public class Book { 

@Id 
@GeneratedValue 
private long id; 
@Column(nullable = false) 
private String title; 
private Float price; 
@Column(length = 2000) 
private String description; 
private String isbn; 
private Integer nbOfPage; 
private Boolean illustrations; 
@ElementCollection(fetch = FetchType.EAGER) 
@CollectionTable(name = "tag") 
@Column(name = "Value") 
private List<String> tags; 

public List<String> getTags() { 
    return tags; 
} 

public void setTags(List<String> tags) { 
    this.tags = tags; 
} 

public long getId() { 
    return id; 
} 

public void setId(long id) { 
    this.id = id; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public Float getPrice() { 
    return price; 
} 

public void setPrice(Float price) { 
    this.price = price; 
} 

public String getDescription() { 
    return description; 
} 

public void setDescription(String description) { 
    this.description = description; 
} 

public String getIsbn() { 
    return isbn; 
} 

public void setIsbn(String isbn) { 
    this.isbn = isbn; 
} 

public Integer getNbOfPage() { 
    return nbOfPage; 
} 

public void setNbOfPage(Integer nbOfPage) { 
    this.nbOfPage = nbOfPage; 
} 

public Boolean getIllustrations() { 
    return illustrations; 
} 

public void setIllustrations(Boolean illustrations) { 
    this.illustrations = illustrations; 
} 
} 

BookEJBRemote.java:

package bookstore.controller; 

import java.util.List; 

import javax.ejb.Remote; 

import bookstore.model.Book; 

@Remote 
public interface BookEJBRemote { 

    public List<Book> findBooks(); 

    public Book findBookById(long id); 

    public Book createBook(Book book); 

    public Book deleteBook(Book book); 

    public Book updateBook(Book book); 

} 

BookEJB.java: 包bookstore.controller;

import java.util.List; 

import javax.ejb.LocalBean; 
import javax.ejb.Stateless; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import javax.persistence.TypedQuery; 

import bookstore.model.Book; 

@Stateless 
@LocalBean 
public class BookEJB implements BookEJBRemote { 

    @PersistenceContext(unitName = "bookstore_persistence") 
    private EntityManager em; 

    /* (non-Javadoc) 
    * @see bookstore.controller.BookEJBRemote#findBooks() 
    */ 
    public List<Book> findBooks() { 
     TypedQuery<Book> query = em 
       .createNamedQuery("findAllBooks", Book.class); 
     return query.getResultList(); 
    } 

    /* (non-Javadoc) 
    * @see bookstore.controller.BookEJBRemote#findBookById(long) 
    */ 
    public Book findBookById(long id) { 
     return em.find(Book.class, id); 
    } 

    /* (non-Javadoc) 
    * @see bookstore.controller.BookEJBRemote#createBook(bookstore.model.Book) 
    */ 
    public Book createBook(Book book) { 
     em.persist(book); 
     return book; 
    } 

    /* (non-Javadoc) 
    * @see bookstore.controller.BookEJBRemote#deleteBook(bookstore.model.Book) 
    */ 
    public Book deleteBook(Book book) { 
     em.remove(book); 
     return book; 
    } 

    /* (non-Javadoc) 
    * @see bookstore.controller.BookEJBRemote#updateBook(bookstore.model.Book) 
    */ 
    public Book updateBook(Book book) { 

     return em.merge(book); 
    } 
} 

的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0"> 
    <persistence-unit name="bookstore_persistence" 
     transaction-type="JTA"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <jta-data-source>jdbc/mysqlPool</jta-data-source> 
     <class>bookstore.model.Book</class> 
     <properties> 
      <property name="eclipselink.target-database" value="MYSQL" /> 
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 
      <property name="eclipselink.logging-level" value="INFO" /> 
      <!-- property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/testdb" /> 
      <property name="javax.persistence.jdbc.user" value="test_user" /> 
      <property name="javax.persistence.jdbc.password" value="password" /--> 
     </properties> 
    </persistence-unit> 
</persistence> 

的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.sambaran</groupId> 
    <artifactId>bookstore</artifactId> 
    <version>1.0.1-SNAPSHOT</version> 
    <name>sample-bookstore</name> 
    <dependencies> 
     <dependency> 
      <groupId>org.eclipse.persistence</groupId> 
      <artifactId>javax.persistence</artifactId> 
      <version>2.0.0</version> 
     </dependency> 
     <!-- <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> 
      <scope>runtime</scope> <version>2.6.0</version> </dependency> <dependency> 
      <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.35</version> 
      </dependency> --> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.12</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish</groupId> 
      <artifactId>javax.ejb</artifactId> 
      <version>3.0.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.extras</groupId> 
      <artifactId>glassfish-embedded-all</artifactId> 
      <version>3.0.1</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.2</version> 
       <configuration> 
        <archive> 
         <manifest> 
          <mainClass>bookstore.client.BookStoreMain</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

主类BookstoreMain.java EJB的

package bookstore.client; 

import java.util.ArrayList; 

import javax.ejb.EJB; 

import bookstore.controller.BookEJBRemote; 
import bookstore.model.Book; 


public class BookStoreMain { 
    @EJB 
    private static BookEJBRemote bookEJB; 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Book book = new Book(); 
     book.setTitle("Head First Servlets and JSP"); 
     book.setDescription("A brain friendly guide."); 
     book.setIllustrations(true); 
     book.setIsbn("1-3244-3237676"); 
     book.setPrice(new Float(400.00)); 
     book.setNbOfPage(865); 
     ArrayList<String> tags = new ArrayList<String>(); 
     tags.add("java"); 
     tags.add("J2SE"); 
     book.setTags(tags); 
     bookEJB.createBook(book); 
     book.setTitle("Hear First SQL"); 
     bookEJB.updateBook(book); 
     //bookEJB 
    } 

} 

部署成功使用asadmin命令。请检查下面的详细信息。

[email protected]:~/glassfish-4.1/glassfish/bin$ ./asadmin list-applications --type ejb 
bookstore-1.0.1-SNAPSHOT <ejb> 


Command list-applications executed successfully. 

当我尝试使用appclient来安装客户端时,它有提到的错误。 PFB细节。

[email protected]:~/glassfish-4.1/glassfish/bin$ ./appclient -client /home/sambaran/workspace/bookstore/target/bookstore-1.0.1-SNAPSHOT.jar 
Exception in thread "main" javax.ejb.EJBException: java.rmi.MarshalException: CORBA MARSHAL 1330446343 No; nested exception is: 
    org.omg.CORBA.MARSHAL: ----------BEGIN server-side stack trace---------- 
org.omg.CORBA.MARSHAL: FINE: 00810007: Underflow in BufferManagerReadStream after last fragment in message vmcid: OMG minor code: 7 completed: No 
    at com.sun.proxy.$Proxy167.endOfStream(Unknown Source) 
    at com.sun.corba.ee.impl.encoding.BufferManagerReadStream.underflow(BufferManagerReadStream.java:122) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_1.grow(CDRInputStream_1_1.java:111) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_2.alignAndCheck(CDRInputStream_1_2.java:126) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_long(CDRInputStream_1_0.java:433) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readValueTag(CDRInputStream_1_0.java:1672) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:918) 
    at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:518) 
    at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.read(DynamicMethodMarshallerImpl.java:383) 
    at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readArguments(DynamicMethodMarshallerImpl.java:450) 
    at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:171) 
    at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatchToServant(ServerRequestDispatcherImpl.java:528) 
    at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatch(ServerRequestDispatcherImpl.java:199) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequestRequest(MessageMediatorImpl.java:1549) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:1425) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleInput(MessageMediatorImpl.java:930) 
    at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:213) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:694) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.dispatch(MessageMediatorImpl.java:496) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.doWork(MessageMediatorImpl.java:2222) 
    at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497) 
    at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540) 

----------END server-side stack trace---------- vmcid: OMG minor code: 7 completed: No 
    at bookstore.controller._BookEJBRemote_Wrapper.createBook(bookstore/controller/_BookEJBRemote_Wrapper.java) 
    at bookstore.client.BookStoreMain.main(BookStoreMain.java:28) 
Caused by: java.rmi.MarshalException: CORBA MARSHAL 1330446343 No; nested exception is: 
    org.omg.CORBA.MARSHAL: ----------BEGIN server-side stack trace---------- 
org.omg.CORBA.MARSHAL: FINE: 00810007: Underflow in BufferManagerReadStream after last fragment in message vmcid: OMG minor code: 7 completed: No 
    at com.sun.proxy.$Proxy167.endOfStream(Unknown Source) 
    at com.sun.corba.ee.impl.encoding.BufferManagerReadStream.underflow(BufferManagerReadStream.java:122) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_1.grow(CDRInputStream_1_1.java:111) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_2.alignAndCheck(CDRInputStream_1_2.java:126) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_long(CDRInputStream_1_0.java:433) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readValueTag(CDRInputStream_1_0.java:1672) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:918) 
    at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:518) 
    at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.read(DynamicMethodMarshallerImpl.java:383) 
    at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readArguments(DynamicMethodMarshallerImpl.java:450) 
    at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:171) 
    at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatchToServant(ServerRequestDispatcherImpl.java:528) 
    at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatch(ServerRequestDispatcherImpl.java:199) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequestRequest(MessageMediatorImpl.java:1549) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:1425) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleInput(MessageMediatorImpl.java:930) 
    at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:213) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:694) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.dispatch(MessageMediatorImpl.java:496) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.doWork(MessageMediatorImpl.java:2222) 
    at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497) 
    at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540) 

----------END server-side stack trace---------- vmcid: OMG minor code: 7 completed: No 
    at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:266) 
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:211) 
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:150) 
    at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:226) 
    at bookstore.controller.__BookEJBRemote_Remote_DynamicStub.createBook(bookstore/controller/__BookEJBRemote_Remote_DynamicStub.java) 
    ... 2 more 
Caused by: org.omg.CORBA.MARSHAL: ----------BEGIN server-side stack trace---------- 
org.omg.CORBA.MARSHAL: FINE: 00810007: Underflow in BufferManagerReadStream after last fragment in message vmcid: OMG minor code: 7 completed: No 
    at com.sun.proxy.$Proxy167.endOfStream(Unknown Source) 
    at com.sun.corba.ee.impl.encoding.BufferManagerReadStream.underflow(BufferManagerReadStream.java:122) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_1.grow(CDRInputStream_1_1.java:111) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_2.alignAndCheck(CDRInputStream_1_2.java:126) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_long(CDRInputStream_1_0.java:433) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readValueTag(CDRInputStream_1_0.java:1672) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:918) 
    at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:518) 
    at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.read(DynamicMethodMarshallerImpl.java:383) 
    at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readArguments(DynamicMethodMarshallerImpl.java:450) 
    at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:171) 
    at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatchToServant(ServerRequestDispatcherImpl.java:528) 
    at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatch(ServerRequestDispatcherImpl.java:199) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequestRequest(MessageMediatorImpl.java:1549) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:1425) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleInput(MessageMediatorImpl.java:930) 
    at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:213) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:694) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.dispatch(MessageMediatorImpl.java:496) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.doWork(MessageMediatorImpl.java:2222) 
    at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497) 
    at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540) 

----------END server-side stack trace---------- vmcid: OMG minor code: 7 completed: No 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
    at com.sun.corba.ee.impl.protocol.giopmsgheaders.MessageBase.getSystemException(MessageBase.java:813) 
    at com.sun.corba.ee.impl.protocol.giopmsgheaders.ReplyMessage_1_2.getSystemException(ReplyMessage_1_2.java:131) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.getSystemExceptionReply(MessageMediatorImpl.java:594) 
    at com.sun.corba.ee.impl.protocol.ClientRequestDispatcherImpl.processResponse(ClientRequestDispatcherImpl.java:518) 
    at com.sun.corba.ee.impl.protocol.ClientRequestDispatcherImpl.marshalingComplete(ClientRequestDispatcherImpl.java:392) 
    at com.sun.corba.ee.impl.protocol.ClientDelegateImpl.invoke(ClientDelegateImpl.java:258) 
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:198) 
    ... 5 more 

回答

0

它看起来像你的实体类没有序列化,实现Serializable接口在Book

@Entity 
@NamedQuery(name = "findAllBooks", query = "select b from Book b") 
public class Book implements Serializable { 

@Id 
@GeneratedValue 
private long id; 

... 

} 

希望这将有助于。