EJB应用程序中的CORBA异常 [英] CORBA exception in EJB application

查看:150
本文介绍了EJB应用程序中的CORBA异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个EJB / Glassfish的问题。我正在使用客户端 - 服务器应用程序,客户端 - 服务器应用程序中客户端创建一个实体对象,并且必须将其发送到服务器应用程序,该应用程序必须将该实体持久化在其数据库中我选择使用会话bean与服务器通信。
我已经实现了一些简单的情况,其中会话bean中的一个方法作为输入一个字符串或一个int,它工作正常。当我尝试给一个实体对象作为输入时出现问题。



我报告了我的实体类:

  @Entity 
public class Example implements Serializable {
private static final long serialVersionUID = 1L;
@Id
String nome;

public void setNome(String nome){
this.nome = nome;
}

public String getNome(){
return nome;
}

这里我的会话bean:

  @Stateless 
public class GestoreLibreriaRemoto implements GestoreLibreriaRemotoRemote {

@Override
public String getProva(example prova){
return prova.getNome();
}

这里我的客户端应用程序:

  public class GestoreLibreriaLocale {

public static void assegnaCategoriaACopia(CopiaUtente copia,Categoria categoria)throws

public void prova() {
GestoreLibreriaRemotoRemote gestore = lookupGestoreLibreriaRemotoRemote();
示例example = new Example();
prova.setNome(hodor);
System.out.println(gestore.getProva(example));
}

private GestoreLibreriaRemotoRemote lookupGestoreLibreriaRemotoRemote(){
try {
Context c = new InitialContext();
return(GestoreLibreriaRemotoRemote)c.lookup(java:global / ServerMDB / ServerMDB-ejb / GestoreLibreriaRemoto);
} catch(NamingException ne){
Logger.getLogger(getClass()。getName())。log(Level.SEVERE,exception catch,ne);
抛出新的RuntimeException(ne);
}
}

在我的主类中,我只需调用GestoreLibreriaLocale.prova ),我收到以下错误:

  java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl。 invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java。 lang.reflect.Method.invoke(Method.java:483)
在org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:446)
在org.glassfish.appclient。 client.AppClientFacade.main(AppClientFacade.java:166)
引起的:javax.ejb.EJBException:java.rmi.MarshalException:CORBA MARSHAL 1330446346 Maybe;嵌套异常是:
org.omg.CORBA.MARSHAL:---------- BEGIN服务器端堆栈跟踪----------
org.omg。 CORBA.MARSHAL:AVVERTENZA:00810010:CDRInputStream中ValueHandler上的readValue错误vmcid:OMG次要代码:10已完成:可能在com.sun.proxy
$ Proxy139.valuehandlerReadError(未知来源)
at com .sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:912)
在com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1005)
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)
在com.sun.corba.ee.im pl.protocol.ServerRequestDispatcherImpl.dispatchToServant(ServerRequestDispatcherImpl.java:528)
在com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatch(ServerRequestDispatcherImpl.java:199)
在com.sun。 corba.ee.impl.protocol.MessageMediatorImpl.handleRequestRequest(MessageMediatorImpl.java:1549)
在com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:1425)
在com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleInput(MessageMediatorImpl.java:930)
在com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:213 )
在com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:694)
在com.sun.corba.ee.impl.protocol.MessageMediatorImpl.dispatch(MessageMediatorImpl .java:496)
在com.sun.corba.ee.impl.protocol.MessageMediatorImpl.doWork(MessageMediatorImpl.java:2222)
在com.sun.corba.ee.impl.threadpool.ThreadPoolImpl $ WorkerThr ead.performWork(ThreadPoolImpl.java:497)
在com.sun.corba.ee.impl.threadpool.ThreadPoolImpl $ WorkerThread.run(ThreadPoolImpl.java:540)
引起的:java.lang。 NoClassDefFoundError:无法初始化类com.sun.corba.ee.impl.io.IIOPInputStream
在com.sun.corba.ee.impl.io.ValueHandlerImpl.createInputStream(ValueHandlerImpl.java:820)
在com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:263)
在com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:903)
... 16更多

错误日志继续,我不报告整个日志,但如果你需要它,我可以发布。
请帮助我,我正在从事的工作,但没有解决。
感谢您的关注,
Francesco

解决方案

这似乎是当前Java版本中的一个错误(例如 1.7.0_55 1.8.0_05 ),看看这个问题: GLASSFISH-21047



要使其正常工作,请安装或者是较旧的或较新的Java版本(例如 1.7.0_051 1.8.0_020 )。



另请参阅:




I've got a problem with EJB/Glassfish. I'm working on a client-server application in which the client creates an entity object and must send it to the server application, which must persist the entity in its database. I've choose to use session beans to communicate with the server. I've implemented some simple cases in which a method in the session bean takes as input a string or an int and it works fine. The problem arises when I try to give an entity object as input.

I report my entity class:

@Entity
public class Example implements Serializable {
private static final long serialVersionUID = 1L;
@Id
String nome;

public void setNome(String nome) {
    this.nome = nome;
}

public String getNome() {
    return nome;
}

Here my session bean:

 @Stateless
 public class GestoreLibreriaRemoto implements GestoreLibreriaRemotoRemote {

 @Override
 public String getProva(Example prova) {
    return prova.getNome();
 }

Here my client application:

public class GestoreLibreriaLocale {

public static void assegnaCategoriaACopia(CopiaUtente copia, Categoria categoria) throws 

public void prova() {
   GestoreLibreriaRemotoRemote gestore = lookupGestoreLibreriaRemotoRemote();
   Example example = new Example();
   prova.setNome("hodor");
   System.out.println(gestore.getProva(example));
}

private  GestoreLibreriaRemotoRemote lookupGestoreLibreriaRemotoRemote() {
    try {
        Context c = new InitialContext();
        return (GestoreLibreriaRemotoRemote) c.lookup("java:global/ServerMDB/ServerMDB-ejb/GestoreLibreriaRemoto");
    } catch (NamingException ne) {
        Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", ne);
        throw new RuntimeException(ne);
    }
}

In my main class I simply call GestoreLibreriaLocale.prova() and i get the following error:

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:446)
at org.glassfish.appclient.client.AppClientFacade.main(AppClientFacade.java:166)
    Caused by: javax.ejb.EJBException: java.rmi.MarshalException: CORBA MARSHAL 1330446346     Maybe; nested exception is: 
org.omg.CORBA.MARSHAL: ----------BEGIN server-side stack trace----------
    org.omg.CORBA.MARSHAL: AVVERTENZA: 00810010: Error from readValue on ValueHandler in     CDRInputStream  vmcid: OMG  minor code: 10 completed: Maybe
at com.sun.proxy.$Proxy139.valuehandlerReadError(Unknown Source)
    at    com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:912)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1005)
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)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.sun.corba.ee.impl.io.IIOPInputStream
at com.sun.corba.ee.impl.io.ValueHandlerImpl.createInputStream(ValueHandlerImpl.java:820)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:263)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:903)
... 16 more

The error log continues, I don't report the whole log but if you need it I can post it. Please help me, I'm working on it from days without resolving it. Thanks for the attention, Francesco

解决方案

This seems to be a bug in the current Java versions (e.g. 1.7.0_55 and 1.8.0_05), have a look at this issue: GLASSFISH-21047

To make it work, install either an older or a newer Java version (e.g. 1.7.0_051 or 1.8.0_020).

See also:

这篇关于EJB应用程序中的CORBA异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆