wood burning stoves 2.0*
The moose likes EJB and other Java EE Technologies and the fly likes Trouble in getting started with EJB3 Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » EJB and other Java EE Technologies
Bookmark "Trouble in getting started with EJB3" Watch "Trouble in getting started with EJB3" New topic
Author

Trouble in getting started with EJB3

Abhijit Rai
Ranch Hand

Joined: Aug 07, 2008
Posts: 41
Hi All,
I have just started reading Manning -EJB3 in Action and am trying to make a working eg .
I am using JBoss4.2.3GA and MyEclipse5.1 .

The step I followed were:

Step 1.Create a remote interface "HelloUser.java"
Step 2.Create a stateless bean "HelloUserBean.java"
these two are listed as :

"HelloUser.java"
package com.ejb3inaction.actionbazaar.buslogic;
import javax.ejb.Remote;
@Remote
public interface HelloUser {
public void sayHello(String name);
}


"HelloUserBean.java"
package com.ejb3inaction.actionbazaar.buslogic;
import javax.ejb.Stateless;
@Stateless
public class HelloUserBean implements HelloUser {
public void sayHello(String name) {
System.out.println("Hello " + name + " welcome to EJB 3 In Action!");
}
}


Step 3.Deployed the application through MyEclipse on to the Jboss server .
Step 4.Started the JBoss server
Step5.Created a client class "HelloUserClient" listed below


package com.ejb3inaction.actionbazaar.client;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.ejb3inaction.actionbazaar.buslogic.HelloUser;
import com.ejb3inaction.actionbazaar.buslogic.HelloUserBean;

public class HelloUserClient {
private static HelloUser helloUser;

public static void main(String[] args) {
try {
Context context = new InitialContext();
helloUser = (HelloUser) context.lookup("chapter1/"
+ HelloUserBean.class.getSimpleName() + "/remote");
helloUser.sayHello("Obama ");
} catch (NamingException e) {
e.printStackTrace();
}
}
}


All classes compiled OK and showed no eror message/warnings.
The error message that I get on Running "HelloUserClient" as a stand alone application is :


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(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.ejb3inaction.actionbazaar.client.HelloUserClient.main(HelloUserClient.java:16)



I cant figure out how to remove this error ,did I miss a step some where ,please do explain.
Also I am new at JBoss server , so I cant confirm if the application was actually deployed
on the server or not.

Thanks a lot for helping (and going through such a big post )



SCJP5 ,SCWCD5
R K Singh
Ranch Hand

Joined: Oct 15, 2001
Posts: 5371
>>Context context = new InitialContext();

Most probably you should pass JNDI factory credential () to InitialContext constructor.

Hopefully book must have mentioned these steps somewhere.

"Thanks to Indian media who has over the period of time swiped out intellectual taste from mass Indian population." - Chetan Parekh
Abhijit Rai
Ranch Hand

Joined: Aug 07, 2008
Posts: 41
Couldnt find it there mate am searching the net for it .
Jaikiran Pai
Marshal

Joined: Jul 20, 2005
Posts: 10100
    
164

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


See this


[My Blog] [JavaRanch Journal]
Abhijit Rai
Ranch Hand

Joined: Aug 07, 2008
Posts: 41
Thanks a lot guys ,
Got it working now with your help .As you pointed out the trouble was that I did not have jndi.properties in classpath .

So the working solution can be listed as :

Step 1.
Create "HelloUser.java"
package com.ejb3inaction.actionbazaar;
import javax.ejb.Remote;
@Remote
public interface HelloUser {
public void sayHello(String name);
}



Step 2.
Create "HelloUserBean.java"
package com.ejb3inaction.actionbazaar;
import javax.ejb.Stateless;
@Stateless
public class HelloUserBean implements HelloUser {
public void sayHello(String name) {
System.out.println("Hello " + name + " welcome to EJB 3 In Action!");
}
}


Step3.
Created a client class "HelloUserClient"

package com.ejb3inaction.actionbazaar.client;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.ejb3inaction.actionbazaar.buslogic.HelloUser;
import com.ejb3inaction.actionbazaar.buslogic.HelloUserBean;

public class HelloUserClient {
private static HelloUser helloUser;
public static void main(String[] args) {
try {
Context context = new InitialContext();
helloUser = (HelloUser) context.lookup(“HelloUserBean/remote");
helloUser.sayHello("Obama ");
} catch (NamingException e) {
e.printStackTrace();
}
}
}

Step 4.
Create jndi.properties in the souce folder (src folder)

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.namingrg.jnp.interfaces
java.naming.provider.url=jnp://localhost:1099


Step 5.
Deploy the code ,start the server and run the client as a standalone java application.

PS:
Don’t forget to include jBossall-client.jar ,without it ClassNotFound exception is thrown .

thanks and cheers
Abhijit Rai
Ranch Hand

Joined: Aug 07, 2008
Posts: 41
An add on issue ,
I am trying to make the HelloUser interface Local ie

@Local
public interface HelloUser {
public void sayHello(String name);
}

I also changed jndi.properties to

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.namingrg.jnp.interfaces
java.naming.provider.url=jnp://localhost:1099
jnp.localAddress=jnp://localhost:1099
jnp.localPort=1099

The excepiton I get is :

javax.naming.CommunicationException: Could not obtain connection to any of these urls: localhost:1099 and discovery failed with error: javax.naming.CommunicationException: Unresolved address [Root exception is java.net.SocketException: Unresolved address] [Root exception is javax.naming.CommunicationException: Failed to connect to server localhost:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server localhost:1099 [Root exception is java.net.UnknownHostException: jnp://localhost:1099: jnp://localhost:1099]]]
at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1562)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:634)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.ejb3inaction.actionbazaar.HelloUserClient.main(HelloUserClient.java:17)
Caused by: javax.naming.CommunicationException: Failed to connect to server localhost:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server localhost:1099 [Root exception is java.net.UnknownHostException: jnp://localhost:1099: jnp://localhost:1099]]
at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:274)
at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1533)
... 4 more
Caused by: javax.naming.ServiceUnavailableException: Failed to connect to server localhost:1099 [Root exception is java.net.UnknownHostException: jnp://localhost:1099: jnp://localhost:1099]
at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:248)
... 5 more
Caused by: java.net.UnknownHostException: jnp://localhost:1099: jnp://localhost:1099



What changes should be done (I guess to jndi.properties)to access the bean locally ?

Thanks all for helping out .

 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Trouble in getting started with EJB3