serialization - EJB。当我使用 var List 调用 session Bean 时,抛出 : this javax. ejb.EJBException : java. rmi.MarshalException

标签 serialization persistence ejb javabeans stateless-session-bean

我在netbeans中创建了一个java web项目,我创建了我的实体bean,然后部署了我的项目来生成我的数据库,这项工作很成功。

然后我生成了 session bean 来访问创建的数据库。我创建了一个主类来测试 session bean,当我测试通过 session bean 接口(interface)调用的方法“find”时,我注意到某些类抛出异常,并且我注意到带有 vars List 的实体类抛出异常异常就好像它们无法序列化一样。

我想给我带来实体列表是一个请求。

我在同一个项目中拥有实体 bean,该项目在 Web 应用程序中拥有我的 session bean...

我使用 Glass Fish 3.1.2
Netbeans 7.1.2
EclipseLink 2.0

实体持久性是:

@Entity

public class UserApplication implements Serializable {

private static long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idUserApplication;
@Basic(optional=false)
@Column(nullable=false)
private String dcn;
@Basic(optional=false)
@Column(nullable=false)
private String password;
@Basic(optional=false)
@Column(nullable=false)
private String title ;
@Basic(optional=false)
@Column(nullable=false)
private String firstName;
@Basic(optional=false)
@Column(nullable=false)
private String lastName;
@Basic(optional=false)
@Column(nullable=false)
private String ci;
@Basic(optional=false)
@Column(nullable=false)
private String personalEmail;
@Basic(optional=false)
@Column(nullable=false)
private String workEmail;

@OneToMany
@JoinColumn(name = "userApplication_id", nullable = false)
private List<Account> accounts;
@OneToMany
@JoinColumn(name = "userApplication_id", nullable = true)
private List<CreditCard> creditCards = null;

@ManyToMany
@JoinTable(name="UserApplication_BeneficiaryThird", joinColumns=@JoinColumn
        (name="userApplication_id", nullable = false), inverseJoinColumns=
        @JoinColumn(name="beneficiaryThird_id", nullable = false))
private List<BeneficiaryThird> beneficiariesThird = null;

@OneToMany
@JoinColumn(name = "userApplication_id_beneficiary", nullable = true)
private List<BeneficiaryBankItself> beneficiariesBankItself = null;

@ManyToMany
@JoinTable(name="UserApplication_TransactionRule", joinColumns=@JoinColumn
        (name="userApplication_id", nullable = false), inverseJoinColumns=
        @JoinColumn(name="transactionRule_id", nullable = false))
private List<TransactionRule> transactionRules = null;

@OneToOne(mappedBy = "userApplication", optional = true, cascade = CascadeType.ALL)
private SessionCookie cookieId = null;................

主要类是:

public class Main {

public static void main(String[] args) {

    long id = 2;


    bank.setId(id);
    UserApplication userApplication = GetBean.getUserFacade().find(id);
    System.out.println("user: " + userApplication.getFirstName());


    }

}

GetBean是实用程序类,是:

public class GetBean {



public static BankFacadeLocal getBankFacade() {

    BankFacadeLocal bankFacade = null;
    String jndiName = beans.BankFacadeLocal.class.getName();
    try {
         //bankFacade = (BankFacadeLocal) new InitialContext().lookup("java:global/IntegrationBanking/BankFacade!sessionBeans.BankFacadeLocal");
          bankFacade = (BankFacadeLocal) new InitialContext().lookup(jndiName);        
    } catch (NamingException ex) {
        Logger.getLogger(GetBean.class.getName()).log(Level.SEVERE, null, ex);
    }

    return bankFacade;
 }

 public static UserApplicationFacadeLocal getUserFacade() {

    UserApplicationFacadeLocal userFacade = null;
    String jndiName = UserApplicationFacadeLocal.class.getName();
    try {
         // userFacade = (UserApplicationFacadeLocal) new InitialContext().lookup("java:global/IntegrationBanking/UserApplicationFacade!beans.UserApplicationFacadeLocal");
         userFacade = (UserApplicationFacadeLocal) new InitialContext().lookup(jndiName);        
    } catch (NamingException ex) {
        Logger.getLogger(GetBean.class.getName()).log(Level.SEVERE, null, ex);
    }

    return userFacade;
} 

}

同级单位:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
<persistence-unit name="BankingIntegrationPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>sqlServer</jta-data-source>
<properties>
  <property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>

异常(exception)是:

jul 26, 2012 2:55:38 PM com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator handleFullLogging
Advertencia: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream
org.omg.CORBA.MARSHAL: Advertencia: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream  vmcid: OMG  minor code: 11 completed: Maybe
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)............
Caused by: java.io.IOException: Mismatched serialization UIDs : Source (Rep. IDRMI:entities.UserApplication:5CDFA7C871B53786:F07C8D07E21B75FA) = F07C8D07E21B75FA whereas Target (Rep. ID RMI:entities.UserApplication:4357CF2703B83ACF:180694EF6A1B61BC) = 180694EF6A1B61BC
    at com.sun.corba.ee.impl.util.RepositoryId.useFullValueDescription(RepositoryId.java:679)
    at com.sun.corba.ee.impl.util.RepositoryId.useFullValueDescription(RepositoryId.java:639)
    at com.sun.corba.ee.impl.io.ValueHandlerImpl.useFullValueDescription(ValueHandlerImpl.java:360)
    at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:422)........
jul 26, 2012 2:55:38 PM com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator handleFullLogging
Advertencia: ORBIO00013: Stream corrupted
java.io.StreamCorruptedException: Advertencia: ORBIO00013: Stream corrupted
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)............
jul 26, 2012 2:55:38 PM com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator handleFullLogging
Advertencia: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream
org.omg.CORBA.MARSHAL: Advertencia: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream  vmcid: OMG  minor code: 11 completed: Maybe
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)............
Caused by: java.io.StreamCorruptedException: Advertencia: ORBIO00013: Stream corrupted
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)...........
Exception in thread "main" javax.ejb.EJBException: java.rmi.MarshalException: CORBA MARSHAL 1330446347 Maybe; nested exception is: 
    org.omg.CORBA.MARSHAL: Advertencia: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream  vmcid: OMG  minor code: 11 completed: Maybe
    at beans._BeneficiaryBankItselfFacadeLocal_Wrapper.find(beans/_BeneficiaryBankItselfFacadeLocal_Wrapper.java)....................
Caused by: java.rmi.MarshalException: CORBA MARSHAL 1330446347 Maybe; nested exception is: 
    org.omg.CORBA.MARSHAL: Advertencia: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream  vmcid: OMG  minor code: 11 completed: Maybe
    at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:267)...........
Caused by: org.omg.CORBA.MARSHAL: Advertencia: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream  vmcid: OMG  minor code: 11 completed: Maybe
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)..................
Caused by: java.io.StreamCorruptedException: Advertencia: ORBIO00013: Stream corrupted
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)....................

最佳答案

我的回答可能有偏差,但我经历过这个问题并解决了它。对我来说,问题很简单,就是我的数据库没有连接!我在 Glassfish 中对此进行了测试,确认了数据库连接问题并修复了它,然后这个错误就消失了。

就理解为什么这是我们收到的神秘错误消息而言,以下解释可能会有所帮助:

  • 首先,实体 Bean(现已被 Java Persistence API 取代)是一种 EJB,因此在 EJB 容器中运行。
  • 您的主类存在于 EJB 容器之外,因此必须“调用”EJB。它通过使用 CORBA(公共(public)对象请求代理架构)来实现此目的
  • CORBA 的构建理念是您可以远程实例化和操作对象。例如,您可以创建一个 EJB 实例、设置其成员属性、运行其方法,所有这些都可以通过位于 EJB 容器外部的主方法进行。 CORBA 是一个通用标准,理论上任何“客户端”都可以使用(例如,进行 CORBA 兼容调用的 C++ 程序理论上可以在这里工作。但是,当然,Java 世界中的我们大多数人只是使用 CORBA 来访问EJB 容器。
  • 您遇到的特定错误是ORBIO00013:流损坏,我不完全理解,但我认为这意味着您的主程序成功连接到EJB容器,EJB容器抛出了一个异常,然后返回 CORBA 不期望的内容,这破坏了用于发送响应的流。
  • 真正的问题是 CORBA 没有很好地处理 EJB 中抛出的异常,因此解决此问题的唯一方法是调试程序并找到 EJB 中抛出异常的位置,然后查看直接在调试器中出现异常。

完成所有这些最终帮助我理解了一个简单的数据库连接问题(!)就是问题所在。

希望这有帮助, 乔什

关于serialization - EJB。当我使用 var List 调用 session Bean 时,抛出 : this javax. ejb.EJBException : java. rmi.MarshalException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11677345/

相关文章:

java - 在 EJB 中使用 @Timeout 代替 Thread.sleep()

python - 酸洗时忽略不可酸洗的对象

serialization - Dart 序列化不可变对象(immutable对象)

java - 从java获取plsql过程的值

java - 类是托管的,但未在 persistence.xml 文件中列出

jpa - 调用JPA的remove()时: "A JTA EntityManager cannot use getTransaction()"

symfony - 使用 Symfony Serialiser 创建 XML 时如何控制标签排序?

java - java中以特定字母开头的文件列表

performance - enable-call-by-reference 的效果

java - Maven 原型(prototype)中的公爵年龄在哪里?每第一杯 JEE7