[jboss-user] [EJB 3.0] - Accessing EJB3 without a home interface

nbhatia do-not-reply at jboss.com
Sun Jul 13 03:11:43 EDT 2008


According to the EJB 3.0 Spec:

anonymous wrote : 
  | The requirement for Home interfaces has been eliminated. Session beans are no longer required to have home interfaces. A client may acquire a reference to a session bean through one of the mechanisms described in Chapter 8.
  | 

I am trying to do exactly that, i.e. to access an EJB 3 from a remote client without a home interface. However I am getting a NameNotFoundException. Can someone help me understand how to do this?

Here's my session bean interface:


  | public interface HelloWorld {
  |     public String getHelloMessage();
  | }
  | 

Here's the implementation:


  | @Stateless @Remote
  | public class HelloWorldBean implements HelloWorld {
  | 
  |     public String getHelloMessage() {
  |         return "Hello World";
  |     }
  | }
  | 

Here's the call from the client:


  | public class HelloWorldEjb3Client {
  | 
  |     public static void main(String[] args) {
  | 
  |         try {
  |             // Look up the HelloWorld home interface
  |             Object obj = getContext().lookup("HelloWorld");
  |             HelloWorld helloWorld =
  |                 (HelloWorld)javax.rmi.PortableRemoteObject.narrow(obj, HelloWorld.class );
  | 
  |             // Start using the HelloWorld object
  |             System.out.println(helloWorld.getHelloMessage());
  |         }
  |         catch (Exception e) {
  |             e.printStackTrace();
  |         }
  |     }
  | 
  |     public static final Context getContext() throws javax.naming.NamingException {
  |     	System.out.println("Connecting to JBoss");
  |         Hashtable<String, String> env = new Hashtable<String, String>();
  |         env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
  |         env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
  |         env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
  |         return new InitialContext(env);
  |     }
  | }
  | 

The exception is:


  | javax.naming.NameNotFoundException: HelloWorld not bound
  | 

Here's my ejb-jar.xml. It is essentially empty. I created it just because the Maven EJB Plugin was complaining that it could not find a ejb-jar.xml. Since I am using annotations, I don't believe that I should require this file.


  | <?xml version="1.0" encoding="UTF-8"?>
  | 
  | <ejb-jar
  |     xmlns="http://java.sun.com/xml/ns/javaee"
  |     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  |     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
  |     version="3.0">
  | </ejb-jar>
  | 

Looking at the JNDI tree, I believe that the HelloWorld bean has been deployed:


  | Global JNDI Namespace
  |   +- helloworldejb3-app-1.0 (class: org.jnp.interfaces.NamingContext)
  |   |   +- HelloWorldBean (class: org.jnp.interfaces.NamingContext)
  |   |   |   +- remote (proxy: $Proxy64 implements interface samples.helloworldejb3.HelloWorld,interface org.jboss.ejb3.JBossProxy)
  | 

So what is the right way to access this bean from a remote client?

Thanks.
Naresh

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4164064#4164064

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4164064



More information about the jboss-user mailing list