在EJB 3中使用appclient jar的例外情况:javax.ejb.EJBException:java.rmi.MarshalException:

时间:2015-06-12 03:28:53

标签: java java-ee glassfish ejb-3.0

我正在尝试学习ejb 3并在下面提到的场景中遇到一个我无法弄清楚的问题。

  1. 我有一个实体(书)来存储图书相关数据。
  2. 我创建了无状态Bean和远程接口,并在glassfish 4中部署了jar。
  3. 基本应用程序连接到主要方法,我需要使用appclient获取本书的详细信息。这里我收到一个错误" javax.ejb.EJBException:java.rmi.MarshalException:"
  4. 请查看以下摘要以获取更多详细信息。

    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:     package 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

    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命令成功部署ejb。请查看以下详细信息。

    sambaran@sambaran-home:~/glassfish-4.1/glassfish/bin$ ./asadmin list-applications --type ejb
    bookstore-1.0.1-SNAPSHOT  <ejb>
    
    
    Command list-applications executed successfully.
    

    当我尝试使用appclient安装客户端时,它出现了上述错误。 PFB详细信息。

    sambaran@sambaran-home:~/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
    

1 个答案:

答案 0 :(得分:1)

看起来你的实体类没有序列化,在<link href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/redmond/jquery-ui.css" rel="stylesheet" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="//code.jquery.com/color/jquery.color.plus-names-2.1.2.js"></script> <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.js"></script> <div id="slider"></div> <div id="idOfMyDiv">There is something here</div>类中实现Serializable接口

Book
希望它会有所帮助。

相关问题