簡體   English   中英

嘗試訪問會話Bean時出錯

[英]Error while trying to access a session bean

我在運行簡單的EJB3來訪問會話bean時遇到javax.naming.NoInitialContextException

以下是我的客戶課程:

package com.ibytecode.client;
import javax.naming.Context;
import javax.naming.NamingException;

import com.ibytecode.business.HelloWorld;
import com.ibytecode.businesslogic.HelloWorldBean;
import com.ibytecode.clientutility.ClientUtility;

public class EJBApplicationClient {

    /**
     * @param args
     */
    public static void main(String[] args) {
        HelloWorld bean = doLookup();
        System.out.println(bean.sayHello()); // 4. Call business logic
    }

    private static HelloWorld doLookup() {
        Context context = null;
        HelloWorld bean = null;
        try {
            // 1. Obtaining Context
            context = ClientUtility.getInitialContext();
            // 2. Generate JNDI Lookup name
            String lookupName = getLookupName();
            // 3. Lookup and cast
            bean = (HelloWorld) context.lookup(lookupName);

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

    private static String getLookupName() {
/*
The app name is the EAR name of the deployed EJB without .ear suffix.
Since we haven't deployed the application as a .ear,
the app name for us will be an empty string
*/
        String appName = "";

        /* The module name is the JAR name of the deployed EJB
        without the .jar suffix.
        */
        String moduleName = "HelloWorldSessionBean";

/*AS7 allows each deployment to have an (optional) distinct name.
This can be an empty string if distinct name is not specified.
*/
        String distinctName = "";

        // The EJB bean implementation class name
        String beanName = HelloWorldBean.class.getSimpleName();

        // Fully qualified remote interface name
        final String interfaceName = HelloWorld.class.getName();

        // Create a look up string name
        String name = "ejb:" + appName + "/" + moduleName + "/" +
            distinctName    + "/" + beanName + "!" + interfaceName;

        return name;
    }

}

以下是我遇到的錯誤:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at com.ibytecode.client.EJBApplicationClient.doLookup(EJBApplicationClient.java:28)
at com.ibytecode.client.EJBApplicationClient.main(EJBApplicationClient.java:15)
Exception in thread "main" java.lang.NullPointerException
at com.ibytecode.client.EJBApplicationClient.main(EJBApplicationClient.java:16)
  1. 我將以下庫提供給Eclipse的構建路徑,問題消失了。
  2. 不管出於什么原因,將這些jar文件添加到項目中都會擺脫getlookup錯誤javax.naming.NoInitialContextException:需要在環境或系統屬性中或作為applet參數或在應用程序資源文件中指定類名:java.naming.factory 。初始

3 JAR名稱位置jboss-transaction-api_1.1_spec-1.0.0.Final.jar AS7_HOME / modules / javax / transaction / api / main /

jboss-ejb-api_3.1_spec-1.0.1.Final.jar AS7_HOME / modules / javax / ejb / api / main /

jboss-ejb-client-1.0.0.Beta10.jar AS7_HOME / modules / org / jboss / ejb-client / main /

jboss-marshalling-1.3.0.GA.jar AS7_HOME / modules / org / jboss / marshalling / main /

xnio-api-3.0.0.CR5.jar AS7_HOME / modules / org / jboss / xnio / main /

jboss-remoting-3.2.0.CR6.jar AS7_HOME / modules / org / jboss / remoting3 / main /

jboss-logging-3.1.0.Beta3.jar AS7_HOME / modules / org / jboss / logging / main /

xnio-nio-3.0.0.CR5.jar AS7_HOME / modules / org / jboss / xnio / nio / main /

jboss-sasl-1.0.0.Beta9.jar AS7_HOME / modules / org / jboss / sasl / main /

jboss-marshalling-river-1.3.0.GA.jar AS7_HOME / modules / org / jboss / marshalling / river / main /

我認為您應該在應用程序客戶端中運行代碼,它將為您創建初始上下文。 有關更多詳細信息,請參見Java EE Application客戶端容器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM