0

我在 Weblogic 11g 上运行 Java 6。

我正在开发一个使用 EJB 与数据库通信的 Web 服务项目。目前我正在处理错误,因此我尝试在调用 Web 服务之前取消部署 EJB。我的 EJBClientHelper 类如下所示:

package mypackage.elkom.utils;

import java.io.Serializable;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import mypackage.elkom.ejb.beans.session.remote.ElkomRemote;

public class EJBClientHelper implements Serializable {

  /**
   * 
   */
  private static final long serialVersionUID = 1L;

  private ElkomRemote elkomRemote;

  private static final String ELKOM_JNDI =   "ElkomBean#mypackage.ejb.beans.session.remote.ElkomRemote";

  private Context ctx;

  private void prepareEjb3Connection() throws PropsFileException, NamingException {
      // Here's code for getting the ejbProviderURL from propsfile //
      props.put("java.naming.factory.initial", weblogic.jndi.WLInitialContextFactory");
      props.put("java.naming.provider.url",ejbProviderURL);
      ctx = new InitialContext(props);

 }

  public void setElkomRemote(ElkomRemote elkomRemote) {
    this.elkomRemote = elkomRemote;
  }

  public ElkomRemote getElkomRemote() throws NamingException, PropsFileException {
    prepareEjb3Connection();
    if(elkomRemote == null) {
    elkomRemote = (ElkomRemote)ctx.lookup(ELKOM_JNDI);
   }
   return elkomRemote;
  }

}

但是,当我使用 getElkomRemote(); 我收到此消息的 NamingException:

SEVERE: The object identified by: '678' could not be found.  Either it was has not been exported or it has been collected by the distributed garbage collector.; 
nested exception is: java.rmi.NoSuchObjectException: The object identified by: '678' could not be found.  
Either it was has not been exported or it has been collected by the distributed garbage collector.
javax.ejb.EJBException: The object identified by: '678' could not be found.  Either it was has not been exported or it has been collected by the distributed garbage collector.; 
nested exception is: java.rmi.NoSuchObjectException: The object identified by: '678' could not be found.  
Either it was has not been exported or it has been collected by the distributed garbage collector.
java.rmi.NoSuchObjectException: The object identified by: '678' could not be found.  Either it was has not been exported or it has been collected by the distributed garbage collector.

任何人都知道为什么我收到此消息而不是 NamingException?也许如何解决它?

4

1 回答 1

1

异常分为三个类别:

  • 系统异常
  • JVM 异常
  • 应用程序例外

由于代码错误或配置错误的资源(例如配置错误的 JNDI 查找),可能会发生系统异常。如果企业 bean 面临系统错误,它通常会抛出 javax.ejb.EJBException。容器将 EJBException 包装在 RemoteException 中,最后将 RemoteException 传递回客户端。这就是您的情况发生的情况,这就是您收到 RemoteException 的原因。

系统异常无法从客户端应用程序处理,应作为未经检查的异常抛出。

有关更多详细信息,您可以查看以下文章:

我希望这可以帮助你。

于 2012-08-20T20:43:32.377 回答