Solved

problems with testing an ejb apps in eclipse ide?

Posted on 2004-04-19
10
2,178 Views
Last Modified: 2013-11-24
Hi! I tried to do a simple application in ejb.Its a stateless session bean that just print a hello message.
Im using the sun one application server and i deployed my ejb apps using the deploytool.Im using the
eclipse ide.

I write a test application:

                  Context initContext = new javax.naming.InitialContext();
                  String JNDIName = "java:comp/env/ejb/HelloBean";
                  System.out.println("looking");
                  Object objref = initContext.lookup(JNDIName);
                  HelloHome helloHome = (HelloHome)PortableRemoteObject.narrow(objref,
                                                                  HelloHome.class);
                  System.out.println("looked");
                  Hello hello = helloHome.create();
                  System.out.println("message   " + hello.getMessage());


and when i run it i got an error:

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



sun-ejb.jar.xml
?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 EJB 2.1//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_1-0.dtd">
<sun-ejb-jar>
  <enterprise-beans>
    <unique-id>1300025963</unique-id>
    <ejb>
      <ejb-name>HelloBean</ejb-name>
      <jndi-name>HelloBean</jndi-name>
      <pass-by-reference>false</pass-by-reference>
      <is-read-only-bean>false</is-read-only-bean>
      <refresh-period-in-seconds>-1</refresh-period-in-seconds>
      <cmt-timeout-in-seconds>0</cmt-timeout-in-seconds>
      <gen-classes>
        <remote-impl>simple.HelloBean_EJBObjectImpl</remote-impl>
        <remote-home-impl>simple.HelloBean_RemoteHomeImpl</remote-home-impl>
      </gen-classes>
      <session>
        <quick-checkpoint>true</quick-checkpoint>
      </session>
    </ejb>
  </enterprise-beans>
</sun-ejb-jar>


ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
  <display-name>Ejb1</display-name>
  <enterprise-beans>
    <session>
      <ejb-name>HelloBean</ejb-name>
      <home>simple.HelloHome</home>
      <remote>simple.Hello</remote>
      <ejb-class>simple.HelloBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Bean</transaction-type>
      <security-identity>
        <use-caller-identity/>
      </security-identity>
    </session>
  </enterprise-beans>
</ejb-jar>

Any help? thanks.


raymond

0
Comment
Question by:rdy1437
  • 4
  • 3
  • 3
10 Comments
 
LVL 1

Expert Comment

by:manifoldronin
ID: 10865771
Every J2EE compliant app server has a pair of vendor specific values for the two standard properties required for creating a JNDI initial context.  IIRC, for Sun ONE, it's like this:

Properties env = new Properties();
env.put("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory");
env.put("java.naming.provider.url", "iiop://<your-server-name>:<port>");
InitialContext jndi = new InitialContext(env);
0
 
LVL 30

Expert Comment

by:Mayank S
ID: 10866047
Yup, it would be better to use the provided constants, like:

env.put ( javax.naming.Context.PROVIDER_URL, "com.sun.jndi.cosnaming.CNCtxFactory" ) ;
env.put ( javax.naming.Context.INITIAL_CONTEXT_FACTORY, "iiop://server-name:port>" ) ;

- it would be even better to store the Provider-URL in a properties-file and read from there because if you deploy on something else (like Websphere), then the name will change.
0
 

Author Comment

by:rdy1437
ID: 10866207
Hi!

I tried to use this :

   Properties env = new Properties();
   env.put ( javax.naming.Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory") ;
   env.put ( javax.naming.Context.PROVIDER_URL, "iiop://localhost:9090") ;
   InitialContext initContext = new InitialContext(env);


but i got this error:


javax.naming.CommunicationException: Cannot connect to ORB [Root exception is org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 208 completed: Maybe]
      at com.sun.jndi.cosnaming.CNCtx.setOrbAndRootContext(Unknown Source)
      at com.sun.jndi.cosnaming.CNCtx.initUsingIiopUrl(Unknown Source)
      at com.sun.jndi.cosnaming.CNCtx.initUsingUrl(Unknown Source)
      at com.sun.jndi.cosnaming.CNCtx.initOrbAndRootContext(Unknown Source)
      at com.sun.jndi.cosnaming.CNCtx.<init>(Unknown Source)
      at com.sun.jndi.cosnaming.CNCtxFactory.getInitialContext(Unknown Source)
      at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
      at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
      at javax.naming.InitialContext.init(Unknown Source)
      at javax.naming.InitialContext.<init>(Unknown Source)

my sun one server is running, access it thru http://localhost:9090

      
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 30

Expert Comment

by:Mayank S
ID: 10867357
Try: env.put ( javax.naming.Context.PROVIDER_URL, "http://localhost:9090") ;
0
 
LVL 1

Expert Comment

by:manifoldronin
ID: 10870190
Hmm I don't think it's the same URL.  It's definitely "iiop://localhost:" + port.  I'm not very sure about which version of the Sun ONE you are running, so I don't know the port number.  Give 3700 a try because IIRC that's the default.
0
 

Author Comment

by:rdy1437
ID: 10875326
manifoldronin,
im using the one bundle with the j2ee1.4 installer
0
 

Author Comment

by:rdy1437
ID: 10875382
i  tried
 env.put ( javax.naming.Context.PROVIDER_URL, "iiop://localhost:3700") ;

but got the following exception:

javax.naming.NameNotFoundException [Root exception is org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]
0
 
LVL 30

Expert Comment

by:Mayank S
ID: 10876520
Yeah, it should be "iiop://". I have never used "http:" - suggested that just in case.... because "iiop" did not seem to work. Are you sure your class-path is properly set? I mean - if you're using your own IDE, it would generally use its own classpath and not the system classpath.
0
 
LVL 1

Accepted Solution

by:
manifoldronin earned 150 total points
ID: 10878591
I think you have got the right URL.  Ironically, though, telling from the new exception you got and this link below, to get an InitialContext through IIOP, you probably have to do it in a different way.  8-)

http://forum.java.sun.com/thread.jsp?forum=51&thread=497115&tstart=0&trange=15
(The last post gives an answer)
0
 

Author Comment

by:rdy1437
ID: 10896920
Thanks manifoldronin!

I used the following code and it works.


Properties env = System.getProperties();
env.setProperty( javax.naming.Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory") ;
env.setProperty( javax.naming.Context.PROVIDER_URL, "iiop://purple:3700") ;*/

InitialContext context = new InitialContext();  
Object objref = context.lookup("HelloBean");
System.out.println("Looking               - " + context.getEnvironment());
System.out.println("Looking               - " + objref );
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
hibernate example using maven 12 59
How do I remove an object from a 3 40
Convert from a json string array to a Java object 3 54
Java Restore security prompts not working 10 74
Most ColdFusion developers get confused between the CFSet, Duplicate, and Structcopy methods of copying a Structure, especially which one to use when. This Article will explain the differences in the approaches with examples; therefore, after readin…
Introduction This article explores the design of a cache system that can improve the performance of a web site or web application.  The assumption is that the web site has many more “read” operations than “write” operations (this is commonly the ca…
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question