[英]Exceptions with EJB3
我在一个 session bean 中使用一个方法,它被一个带有 IOException 的 try and catch bloc 包围,看起来它是一个问题,因为当我尝试从 java 项目客户端调用一个方法时,这是我的 bean 代码
package com.et;
import com.gestionfichier.gestion.*;
import java.io.IOException;
import javax.ejb.ApplicationException;
import javax.ejb.Stateless;
@Stateless
public class PremierEJB3Bean implements PremierEJB3 {
public String envoicode(String Code) {
String s = null;
try {
s = GestionFichier.CopierCode(Code);
} catch (IOException e) {
e.printStackTrace();
}
CompilerFichierC.CompilerFichier(s,s);
return "Compilation réussie !";
}
}
这是我的客户端 bean 代码:
package com.et;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class PremierEJB3Client {
public static void main(String[] args) {
try {
Context context = new InitialContext();
PremierEJB3 beanRemote = (PremierEJB3)
context.lookup("PremierEJB3Bean/remote");
System.out.println(beanRemote.envoicode("somthing"));
} catch (NamingException e) {
e.printStackTrace();
}
}
}
这是我在控制台中得到的
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
at $Proxy0.envoicode(Unknown Source)
at com.et.PremierEJB3Client.main(PremierEJB3Client.java:15)
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)
And more....
所以我很确定我的 bean 中的异常导致了我这个问题,但我不知道如何解决这个问题
为了从独立客户端进行EJB的JNDI查找,需要添加上下文属性。
类似于以下内容。
Hashtable<String, String> ht = new Hashtable<String, String>();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
Context ct=new InitialContext(ht);
这并不一定表示未找到 EJB bean - 可能的情况是找到了 bean,并且在 EJB 容器中调用了它的初始化程序,并在那里引发了异常。
因此,您可能会看到ClassNotFound - java.lang.StackTraceElement
,因为以某种方式将序列化的StackTraceElement
返回给无法反序列化的客户端(例如,由于用于编译服务器代码的 Java 版本与客户端?)
这是在我自己的场景中发生的,在该场景中找到了 EJB,但后来当我对其调用某个方法时,出现了类似的堆栈跟踪 - 因为 EJB 容器/服务器端发生了异常。 我修复了 EJB 中的错误,并停止寻找其堆栈跟踪无法安全传递给客户端的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.