Solved

Calling a servlet from java program...

Posted on 2002-03-27
5
797 Views
Last Modified: 2013-11-24
hi,
I'm using JRUN 3.0 as my app. server, I have class called DBManager which will handle transaction to database server. My servlet can work correctly with this class but when i call this class from my java program, it'won't work...

The error occured in my contructor which is look like below.

public DBManager(String disDsn) throws Exception {
  dataSourceName = disDsn;
  initialcontext = new InitialContext();
  disDataSource = (DataSource)initialcontext.lookup       ("java:comp/env/jdbc/" + disDsn);
}

when i init this class from my java program, i got this error message :
<<Need to specify class name in environment or system property, or as an applet parameter, or in an appication resource file:  java.naming.factory.initial>>

please guide.. FYI, i'm new in java...:-)

thanks for your time..
0
Comment
Question by:pleasure
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
5 Comments
 
LVL 1

Expert Comment

by:pepenieto
ID: 6898664
When you create a new InitialContext from outside your application server, you must pass as parameter a hashtable with the parameters:
  - Context.PROVIDER_URL (connection url to your app server)
  - Context.SECURITY_PRINCIPAL (login to your app server)
  - Context.SECURITY_CREDENTIALS (password to your app server)
  - Context.INITIAL_CONTEXT_FACTORY (the class of your app server that implements the context factory)
0
 

Author Comment

by:pleasure
ID: 6898705
hi pepenieto,
thanks for your response, as i said before..i'm new in java..can u explain more about your solution...:) or is there any link for me so that i can study about it...

thanks again..
0
 
LVL 1

Accepted Solution

by:
pepenieto earned 50 total points
ID: 6898732
Hi pleasure,

When you access to JNDI, you need a InitialContext (like root) to look for something. When you create a new InitialContext under your application server (jrun?), you don´t need to pass any parameter.

But think that you want to look for something in your jndi tree from another machine (like web server or applet, f.e). You must specify where is the application server machine (PROVIDER_URL), what are your credentials (SECURITY_PRINCIPAL & SECURITY_CREDENTIALS) and what´s the class for creating your initial context (INITIAL_CONTEXT_FACTORY).

This way, you must include in your classpath (on in your jar file if is an applet) the context factory class. You can find it in the .jar of jrun (I suppose).

You can find documentation for jrun in the next url:

http://www.macromedia.com/v1/documents/jr31/migration.pdf

Go to the "Migration EJB clients" section.

There is an example:

Properties properties = new Properties();
// Define remote properties in initial context
properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"allaire.ejipt.ContextFactory");
properties.setProperty(Context.PROVIDER_URL,
"ejipt://remotehost:2773");
String user_name = "client";
String password = "client";
// Define username and password (hard-wired in this example)
properties.setProperty(Context.SECURITY_PRINCIPAL, user_name);
properties.setProperty(Context.SECURITY_CREDENTIALS, password);
// Debugging messages
Context ctx = new InitialContext(properties);

Good luck!
0
 

Author Comment

by:pleasure
ID: 6901047
hi pepenieto,
i'm trying out your solution.. let you know the outcome later... thanks anyway...
0
 

Author Comment

by:pleasure
ID: 6901343
hi,
i try another approach to call servlet..
i found this code from other question posted here...
The code is as follow..
/*****************************/
ObjectInputStream is;
URL url;
HashMap hash = new HashMap();    
try {
 url = new URL("http://myserv/myApp/servlet/HelloServlet");
 URLConnection urlConn = url.openConnection();
 is = new ObjectInputStream(url.openStream());
 hash = (HashMap) is.readObject();
 System.out.println(hash);
} catch (Exception e) {
 e.printStackTrace(System.err);
}
/*****************************/

but when i run this java program, i got error
<<
java.io.StreamCorruptedException: InputStream does not contain a serialized object
        at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
        at java.io.ObjectInputStream.<init>(Unknown Source)
        at SDataExtraction.main(SDataExtraction.java:59)
>>

can anyone tell me why?? thanks
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
Viewers learn about the third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.
Suggested Courses

710 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