ejb@glassfish.java.net

Re: Naming Exception

From: Jose Alvarez de Lara <dakhla.0563_at_hotmail.com>
Date: Mon, 14 Feb 2011 07:57:48 +0100

Hi Cheng,

I did what you say but I do not know how have you packaged the appclient jar file.
My system is winXP and when I type in the command line

jar tvf mdb-client.jar

this is what I get

  62 Mon Feb 14 06:32:16 CET 2011 META-INF/MANIFEST.MF
   0 Mon Feb 14 06:28:54 CET 2011 META-INF/
 495 Mon Feb 14 06:38:28 CET 2011 META-INF/application-client.xml
   0 Mon Feb 14 06:29:54 CET 2011 client/
1104 Mon Feb 14 06:31:26 CET 2011 client/Main.class

and nothing about sb/PublisherBeanRemote.class.

I get the appclient jar file from the Eclipse IDE option right click on the project, Export -> App Client jar file,
so I do not understand how you have done it.

Will you can explain how is it.

Thanks,
Jose

From: Cheng Fang
Sent: Friday, February 11, 2011 9:12 PM
To: ejb_at_glassfish.java.net
Cc: Jose Alvarez de Lara
Subject: Re: Naming Exception


Hi Jose,

It could be your project config problem inside eclipse.

Your appclient MANIFEST.MF file is missing a Main-Class attr. I changed it to:

Manifest-Version: 1.0
Class-Path:
Main-Class: client.Main

You also need to include the remote business interface class in appclient jar, as follows:

jar tvf $tmp/mdb-client.jar
    62 Fri Feb 11 15:02:20 EST 2011 META-INF/MANIFEST.MF
     0 Wed Feb 09 17:52:16 EST 2011 META-INF/
   433 Wed Feb 09 17:52:16 EST 2011 META-INF/application-client.xml
     0 Wed Feb 09 08:40:46 EST 2011 client/
  1090 Fri Feb 11 14:36:06 EST 2011 client/Main.class
   247 Fri Feb 11 14:35:28 EST 2011 sb/PublisherBeanRemote.class

I was able to run it with these changes:

asadmin create-jms-resource --restype javax.jms.TopicConnectionFactory jms/ConnectionFactory
asadmin create-jms-resource --restype javax.jms.Topic jms/Topic
asadmin deploy --force true $tmp/mdb-bean.jar
asadmin deploy --force true --retrieve /tmp $tmp/mdb-client.jar
appclient -client /tmp/mdb-clientClient.jar

These are logged in server.log:
[#|2011-02-11T15:04:35.303-0500|INFO|glassfish3.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=160;_ThreadName=Thread-1;|PUBLISHER: Setting message text to: TR|#]

[#|2011-02-11T15:04:35.399-0500|INFO|glassfish3.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=160;_ThreadName=Thread-1;|PUBLISHER: Setting message text to: ET|#]

[#|2011-02-11T15:04:35.430-0500|INFO|glassfish3.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=160;_ThreadName=Thread-1;|ET to TR say :ET#Hola TR...|#]

[#|2011-02-11T15:04:35.432-0500|INFO|glassfish3.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=167;_ThreadName=Thread-1;|TR to ET say :TR#Hola ET...|#]

-cheng

On 2/11/11 9:23 AM, Jose Alvarez de Lara wrote:
  Thanks Chang. Here it is.


  From: Cheng Fang
  Sent: Thursday, February 10, 2011 8:19 PM
  To: ejb_at_glassfish.java.net
  Cc: Jose Alvarez de Lara
  Subject: Re: Naming Exception


  Can you attach a test app, preferably with source code?

  Thanks,
  -cheng

  On 2/10/11 9:41 AM, Jose Alvarez de Lara wrote:
    Hi,

    I am trying an Application Client Project on Eclipse Helios SR1. The app contains a mdb-bean.jar in its classpath that is
    a mdb publish/subscribe and an ejb with a remote interface.

    This is my code in the client,

    private void test() {
    try {
    PublisherBeanRemote publisher = (PublisherBeanRemote) new InitialContext().lookup("java:global/mdb-bean/PublisherBean");
    publisher.publishNews("TR", "ET#Hola TR...");
    publisher.publishNews("ET", "TR#Hola ET...");
    } catch (NamingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    being PublisherBean the implementation of the ejb.

    And this is what I get when I run the app,

    java.lang.NullPointerException
    at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at client.Main.test(Main.java:25)
    at client.Main.main(Main.java:13)
    javax.naming.NamingException: Lookup failed for 'java:global/mdb-bean/PublisherBean' in SerialContext [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext [Root exception is java.lang.NullPointerException]]
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at client.Main.test(Main.java:25)
    at client.Main.main(Main.java:13)

    Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext [Root exception is java.lang.NullPointerException]
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:276)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
    ... 3 more

    Caused by: java.lang.NullPointerException
    at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
    ... 4 more

    The only reason I guess is causing this exception is that the mdb-bean.jar is not in the classpath.
    How can I be sure about it?

    Thanks in advance,
    Jose