【问题标题】:IOException in EJB3EJB3 中的 IOException
【发布时间】:2013-04-13 10:32:25
【问题描述】:

所以我以前问过这个问题,但我并没有安静下来我需要什么。我是 JAVA 企业版和 EJB3 的新手,我正在使用它在 JBOSS 服务器 v4.0 上创建会话 bean。所以这是我的确切问题,我在 bean 上的业务方法必须创建一个文件,保存客户端发送的一些字符串,所以我不得不抛出一个 IOExcpetion。我用 EJB3 尝试了一个 Hello world,它工作了,但是当我开始在我的 bean 上使用异常时,我的客户端不再连接服务器 bean。我会给你我的 bean 和我的客户的代码以及我得到的错误,有人可以帮助我吗,因为我尝试了我能做的一切,但仍然是同样的错误,这是一个工程项目,我真的没时间了,还有两周的时间:( 我的会话 Bean 代码 包 com.et;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.Stateless;
import com.gestionfichier.gestion.GestionFichier;

@Stateless
public class EnvoiCodeExceptionBean implements EnvoiCodeException {

public String EnvoiCode(String Code) throws IOException 
{
    PrintWriter ecrivain = null;
    File f=GestionFichier.CreerFichier("temp");
    ecrivain =  new PrintWriter(new BufferedWriter(new FileWriter(f)));
    ecrivain.println(Code);
    ecrivain.close();
    throw new IOException("error");


}
    }

我的客户代码

 import java.io.IOException;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;

 import com.et.EnvoiCodeException;
 public class AppelClient {
  public static void main(String[] args) throws IOException {
    try {
 Context context = new InitialContext();
 EnvoiCodeException beanRemote = (EnvoiCodeException)
 context.lookup("EnvoiCodeExceptionBean/remote");
 beanRemote.EnvoiCode("some Sring to send");

 } catch (NamingException e) {
 e.printStackTrace();
  }
  }
  }

以及我在 Eclipse 控制台上得到的结果

  Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
at $Proxy0.EnvoiCode(Unknown Source)
at AppelClient.main(AppelClient.java:14)
 Caused by: java.lang.ClassNotFoundException: [Ljava.lang.StackTraceElement;
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at    org.jboss.remoting.loading.RemotingClassLoader.loadClass(RemotingClassLoader.java:50)
at org.jboss.remoting.loading.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:139)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readArray(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.defaultReadObject(Unknown Source)
at java.lang.Throwable.readObject(Throwable.java:913)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.defaultReadObject(Unknown Source)
at java.lang.Throwable.readObject(Throwable.java:913)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.defaultReadObject(Unknown Source)
at java.lang.Throwable.readObject(Throwable.java:913)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.defaultReadObject(Unknown Source)
at java.lang.Throwable.readObject(Throwable.java:913)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:128)
at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:66)
at org.jboss.remoting.transport.socket.SocketClientInvoker.transport(SocketClientInvoker.java:279)
at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:143)
at org.jboss.remoting.Client.invoke(Client.java:525)
at org.jboss.remoting.Client.invoke(Client.java:488)
at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:55)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
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:77)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at    org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102)
... 2 more

【问题讨论】:

  • 我删除了我的答案,因为我认为它是错误的。阅读UndeclaredThrowable 上的文档。你知道请求是否收到你的服务器(记录它)吗?
  • 我阅读了文档和 EJB 限制,我认为出于某些安全原因,EJB 不处理 IOExceptions 的使用和 Bean 中文件的使用,因此它启动了一个不是由我的豆子。因此,在这种项目中使用 EJB3 似乎是一个无望的案例。任何解决方案,比如拦截器来处理这些异常,因为我真的没有时间去学习其他东西
  • 为什么在任何情况下都显式抛出 IOException?这似乎毫无意义。如果你想返回异常并且你相信用户可以处理它,你可以捕获 IOException 并抛出一个更相关的异常。

标签: java ejb-3.0 ioexception


【解决方案1】:

您使用的 API (GestionFichier) 可能会引发此异常。 似乎是一些用户修改的异常抛出。所以没有妥善处理。 请检查并 Catch Throwable 并重试。它可以帮助您更好地了解此处生成的异常。

【讨论】:

  • 请永远不要捕捉 Throwable。
  • 也许只是捕获异常然后。
  • 是的,非常正确,我同意我写的方式可能是错误的,感谢澄清。
  • 如果我仍然捕获 Throwable 将显示异常/错误。 java正在提供它。我们可以抓住它,但可能不是建议的方式
  • 我的 API“CreerFichier”有一个 try catch 块,我在其中使用 java.io.file 中的 createNewFile 并且我捕获了一个 IOException 我看不出我在其他项目中的用户有什么问题,并且我只工作过 EJB3 给我这个错误(抱歉这么晚了)
猜你喜欢
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 2011-10-15
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多