sougata das
sougata das

Reputation: 407

Error while trying to access a session bean

I am getting javax.naming.NoInitialContextException while running a simple EJB3 cient to access a session bean.

Below is my client class:

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;
    }

}

Below is the error I am getting:

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)

Upvotes: 1

Views: 416

Answers (2)

marcus
marcus

Reputation: 5189

I think you should run your code inside an application client, and it will create the initial context for you. See Java EE Application client container for more details.

Upvotes: 0

Patrick Brown
Patrick Brown

Reputation: 21

  1. I supplied the following libraries to the build path of eclipse and the problem went away.
  2. For whatever reason adding these jar files to the project gets rid of the getlookup errorjavax.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

3 JAR name Location 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/

Upvotes: 1

Related Questions