Here is the problem :
I am using a class which invokes a bean using jndi
java://comp/env/ejb/account/Account , when I am using this within bean container then this gets invoked , the code
is written in x class which is getting called when bean is invoked .
public class x {
public static void getJndi() {
InitialContext inc=new InitialContext();
String classname=inc.lookup("java://comp/env/ejb/account/Account");
Class.forName(classname).newInstance();
}
}
this gets invoked when x.getJndi() is called within bean , bean can access because , for InitialContext - If you use the class to retrieve the EJB in the same container, you can simply pass null or ignore them.
like InitialContext inc=new InitialContext();
But how I invoke this getJndi() method without using ejb container,as specified in java documentation if "All parameters are the environment values for creating the initial context, which include the initial context factory, provider URL, user ID, and password then context can be invoked even from simple java code" , but In my case I don't have IntialContext with parameters ? so please could anybody gives me solution , by which I can invoke getJndi even from normal class.
-
I have problem in accessing JNDI? (4 messages)
- Posted by: Nitin Verma
- Posted on: April 08 2002 09:36 EDT
Threaded Messages (4)
- I have problem in accessing JNDI? by Saruman White on April 08 2002 16:39 EDT
- I have problem in accessing JNDI? by Nitin Verma on April 09 2002 03:28 EDT
-
I have problem in accessing JNDI? by Matt Smith on April 09 2002 06:04 EDT
- I have problem in accessing JNDI? by Nitin Verma on April 10 2002 01:59 EDT
-
I have problem in accessing JNDI? by Matt Smith on April 09 2002 06:04 EDT
- I have problem in accessing JNDI? by Nitin Verma on April 09 2002 03:28 EDT
-
I have problem in accessing JNDI?[ Go to top ]
- Posted by: Saruman White
- Posted on: April 08 2002 16:39 EDT
- in response to Nitin Verma
This is an example for WebLogic, your own server should give something like this in its documentation.
Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,
"t3://localhost:7001");
try {
ctx = new InitialContext(ht);
// Use the context in your program
}
catch (NamingException e) {
// a failure occurred
}
finally {
try {ctx.close();}
catch (Exception e) {
// a failure occurred
}
}
-
I have problem in accessing JNDI?[ Go to top ]
- Posted by: Nitin Verma
- Posted on: April 09 2002 03:28 EDT
- in response to Saruman White
Thanks Saruman,
But this will not solve my purpose , I am invoking class x
through reflection , so I don't have authority to make changes in class x , so I can't use IntialContext with parameters .
I need solution which allows me to do reflection on class x which has InitialContext without parameters.
.. Thanks In advance
-
I have problem in accessing JNDI?[ Go to top ]
- Posted by: Matt Smith
- Posted on: April 09 2002 18:04 EDT
- in response to Nitin Verma
Look into using a jndi.properties file. -
I have problem in accessing JNDI?[ Go to top ]
- Posted by: Nitin Verma
- Posted on: April 10 2002 01:59 EDT
- in response to Matt Smith
Thanks Matt.
Thanks for suggestions - I tried and got following error
Error on Execution
====================
TESTING.................. Inside doGet method
Error: 500
Location: /test/servlet/testingAccount
Internal Servlet Error:
com.snstech.account.exceptions.AccountException: AccountX.getDAO: NamingException while getting DAO type :
env not bound
at com.snstech.account.dao.AccountX.getDAO(AccountX.java:32)
at testingAccount.doGet(testingAccount.java:24)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:405)
at org.apache.tomcat.core.Handler.service(Handler.java:287)
at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:812)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:758)
at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213)
at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501)
at java.lang.Thread.run(Thread.java:484)
Execution Path
=================
1) Created testingAccount.java , to test and not using reflection.
2) Set classpath for jndi.properties in run.bat.
testingAccount.java
====================
import javax.naming.NamingException;
import javax.naming.InitialContext;
import com.snstech.account.dao.*;
import com.snstech.account.exceptions.AccountException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;
import java.util.*;
public class testingAccount extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
PrintWriter out = response.getWriter();
out.println("TESTING..................");
out.println("\nInside doGet method");
System.out.println("TESTING..................");
System.out.println("\nInside doGet method");
com.snstech.account.dao.AccountX.getDAO();
}
}
com/snstech/account/dao/AccountX.java
=====================================
package com.snstech.account.dao;
import javax.naming.NamingException;
import javax.naming.InitialContext;
import com.sun.j2ee.blueprints.customer.util.JNDINames;
import com.snstech.account.exceptions.AccountException;
public class AccountX {
public static Account getDAO() throws AccountException {
String static final JNDI_NAME="java:comp/env/ejb/account/Account";
Account acctDao = null;
try {
InitialContext ic = new InitialContext();
String className = (String) ic.lookup(JNDI_NAME);
acctDao = (Account) Class.forName(className).newInstance();
} catch (NamingException ne) {
throw new AccountException("AccountX.getDAO: NamingException while getting DAO type : \n" + ne.getMessage());
} catch (Exception se) {
throw new AccountException("AccountX.getDAO: Exception while getting DAO type : \n" + se.getMessage());
}
return acctDao;
}
}
setting jndi properties
==========================
set classpath=%classpath%;D:\JBoss\jboss\admin\client\jndi.properties
Please help!!!
-- Thanks In Advance