Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 801
  • Last Modified:

Calling a servlet from java program...

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
pleasure
Asked:
pleasure
  • 3
  • 2
1 Solution
 
pepenietoCommented:
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
 
pleasureAuthor Commented:
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
 
pepenietoCommented:
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
 
pleasureAuthor Commented:
hi pepenieto,
i'm trying out your solution.. let you know the outcome later... thanks anyway...
0
 
pleasureAuthor Commented:
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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now