当前位置: 首页 > 知识库问答 >
问题:

如何使用独立程序访问EJB 2.0

郜修雅
2023-03-14

我正在使用Eclipse和Jboss开发EJB2.0项目。下面是代码示例:

package com.example.ejb;

import javax.ejb.*;
import java.rmi.RemoteException;

public interface Advice extends EJBObject {

    public String getAdvice() throws RemoteException;
}
package com.example.ejb;

import java.rmi.RemoteException;

import javax.ejb.*;

public interface AdviceHome extends EJBHome {

    public Advice create() throws CreateException, RemoteException;
}
package com.example.ejb;

import java.rmi.RemoteException;

import javax.ejb.*;

public class AdviceBean implements SessionBean {


private static final long serialVersionUID = 1L;

private String[] adviceStrings = {"One word: inappropriate.", 
           "You mightwant to    rethink that haricut.", "Your boss will respect "};

    public void ejbPassivate() {

            System.out.println("ejb activate");
    }

    public void ejbRemove() {

            System.out.println("ejb remove");

    }

    public void setSessionContext(SessionContext ctx) {

            System.out.println("session context");

    }

    public String getAdvice() {

            System.out.println("in get advice");

            int random = (int) (Math.random() * adviceStrings.length);
            return adviceStrings[random];
    }

    public void ejbCreate() {

            System.out.println("in get create");
    }

    public void ejbActivate() throws EJBException, RemoteException {
        System.out.println("in ejbActivate");

    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"       
"http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar id="ejb-jar_ID">
<display-name>Ejb1</display-name>

<enterprise-beans>  
<session>
   <display-name>AdviceBean</display-name>
   <ejb-name>AdviceBean</ejb-name>
   <home>com.example.ejb.AdviceHome </home>
   <remote>com.example.ejb.Advice</remote>
   <ejb-class>com.example.ejb.AdviceBean</ejb-class>
   <session-type>Stateless</session-type>
   <transaction-type>Bean</transaction-type>
   <security-identity>
     <description></description>
     <use-caller-identity></use-caller-identity>
   </security-identity>
 </session>  
</enterprise-beans>
<ejb-client-jar>EJBProjectClient.jar</ejb-client-jar>
</ejb-jar>

09:33:50,273 INFO[org.jboss.as.ejb3.deployment.processors.ejbJNDIBindingsDeploymentUnitProcessor](MSC service thread 1-3)部署单元部署“ejbProject1.jar”中名为AdviceBean的会话bean的JNDI绑定如下:

java:global/EJBProject1/AdviceBean!com.example.ejb.Advice
java:app/EJBProject1/AdviceBean!com.example.ejb.Advice
java:module/AdviceBean!com.example.ejb.Advice
java:jboss/exported/EJBProject1/AdviceBean!com.example.ejb.Advice
java:global/EJBProject1/AdviceBean!com.example.ejb.AdviceHome
java:app/EJBProject1/AdviceBean!com.example.ejb.AdviceHome
java:module/AdviceBean!com.example.ejb.AdviceHome
java:jboss/exported/EJBProject1/AdviceBean!com.example.ejb.AdviceHome

09:33:50,299 INFO[org.jboss.as.ejb3.deployment.processors.ejbJNDIBindingsDeploymentUnitProcessor](MSC service thread 1-2)部署“EnterpriseApplicationProject.ear”的部署单元子部署“ejbProject.jar”中名为AdviceBean的会话bean的JNDI绑定如下:

java:global/EnterpriseApplicationProject/EJBProject/AdviceBean!com.example.ejb.Advice
java:app/EJBProject/AdviceBean!com.example.ejb.Advice
java:module/AdviceBean!com.example.ejb.Advice
java:jboss/exported/EnterpriseApplicationProject/EJBProject/AdviceBean!com.example.ejb.Advice
java:global/EnterpriseApplicationProject/EJBProject/AdviceBean!com.example.ejb.AdviceHome
java:app/EJBProject/AdviceBean!com.example.ejb.AdviceHome
java:module/AdviceBean!com.example.ejb.AdviceHome
java:jboss/exported/EnterpriseApplicationProject/EJBProject/AdviceBean!com.example.ejb.AdviceHome
package com.example.localclient;

import javax.naming.*;
import java.rmi.*;
import javax.rmi.*;
import javax.ejb.*;

import com.example.ejb.Advice;
import com.example.ejb.AdviceHome;

@SuppressWarnings("unused")
public class AdviceClient {

public static void main(String[] args) throws Exception {
    new AdviceClient().go();

}

public void go() throws Exception{

    Context ic = new InitialContext();
    Object o = ic.lookup("java:jboss/exported/EJBProject1/AdviceBean");
    AdviceHome home = (AdviceHome) PortableRemoteObject.narrow(o, AdviceHome.class);
    Advice advisor = home.create();
    System.out.println(advisor.getAdvice());
}

}

线程“main”javax.naming.noInitialContextException中的异常:需要在环境或系统属性中指定类名,或者作为applet参数,或者在应用程序资源文件中指定类名:在javax.naming.spi.namingManager.getInitialContext(namingManager.java:662)在javax.naming.initialContext.getDefaultinitCTX(initialContext.java:307)在javax.naming.initialContext.java:344)在(AdviceClient.java:24)位于com.example.localclient.adviceClient.main(AdviceClient.java:17)

似乎无法找到JNDI名称,我尝试了JNDI名称的各种组合,这些组合是在JBoss开始时看到的(这些信息在上面很少几段)。

我需要一些信息,我做了谷歌,但仍然面临同样的问题。

1)我必须在独立客户机中提供的JNDI名称是什么?

谢了!

共有1个答案

柳宪
2023-03-14

您的客户机代码运行在不同的JVM中,而不是服务器的JVM中。

你需要的很简单。您需要修改代码,以使用服务器的属性而不是本地属性启动初始上下文。

有关如何做到这一点的更多细节,请参见此链接:http://docs.oracle.com/javase/jndi/tutorial/basics/prepare/initial.html

    null
 类似资料:
  • 我试图通过JSE独立应用程序访问EJB。 在查找过程中找不到JNDI名称,这让我很苦恼。 经过一些研究,没有任何解决方案,我在Glassfish服务器日志中发现了一条部署后的消息,声明如下: “[glassfish 4.1][INFO][AS-EJB-00054][javax.enterprise.EJB.container][tid:_ThreadID=47 _ThreadName=admin

  • 现在假设我们想要使用 Spark API 写一个独立的应用程序。我们将通过使用 Scala(用 SBT),Java(用 Maven) 和 Python 写一个简单的应用程序来学习。 我们用 Scala 创建一个非常简单的 Spark 应用程序。如此简单,事实上它的名字叫 SimpleApp.scala: /* SimpleApp.scala */ import org.apache.spark.S

  • 我们有一个连接到outlook的独立Java应用程序。office365.com使用基本授权。这是一个简单的监控应用程序。 我被要求将其移动到“现代”授权,因此这似乎是在创建Azure应用程序以获取OAUTH2的访问令牌。我“认为”我已经正确地完成了所有设置,包括Microsoft graph API(委托) 电子邮件IMAP。访问服务器。所有offline\u访问SMTP。邮寄 因此,我从以下位

  • 问题内容: 我正在寻找在 独立的(桌面/秋千)* 应用程序中使用 Spring的 示例或教程,我进行了很多搜索,但找不到有用的东西,所有示例和教程均适用于Web应用程序,请告知。 * 问题答案: 使用maven创建独立应用程序,如下所示: 使用Maven创建独立的应用程序 将applicationContext放在类路径中,并按如下所示将其加载到主类中: 在此处查看全文: http://www.d

  • 问题内容: 我正在考虑开发由两部分组成的桌面应用程序: 用户界面(例如Java应用) 后端Node.js服务器 2个部分通过插座连接。不要问为什么我知道这很奇怪。 我将希望能够为客户提供带有安装程序的应用程序。我不希望用户必须自己安装Node.js。 有没有一种方法可以独立安装Node.js服务器,即无需在系统上全局安装Node.js。 对于任何(Windows,Linux,Mac OS X …)