10 Replies Latest reply: Nov 30, 2007 5:06 AM by jaikiran pai RSS

Need to configure JNDI

New Gatein Newbie

Hi,
I have 2 linux machines, one jboss admin running at 1 and two jboss nodes running at 1 and 2. These are clustered using apache for now. But I need to configure the jboss JNDI services. I know it has something to do with jndi.properties and cluster-service.xml but dont know exactly what?
Can someone show how exactly to do this. Suppose linux1 and linux2 ; admin at 80 and other instances .. linux1:81, linux2:81 .

Any kind of help will be appreciated.

Thanks!!!

  • 1. Re: Need to configure JNDI
    wayne baylor Apprentice

    have you tried setting up HA-JNDI?

  • 2. Re: Need to configure JNDI
    New Gatein Newbie

    Thats exactly I need to know how to?

  • 3. Re: Need to configure JNDI
    wayne baylor Apprentice

    have a look at this: http://docs.jboss.com/jbossas/guides/clusteringguide/r2/en/html_single/

    in the process of setting up clustering you will also enable HA-JNDI. when starting a jboss instance you can use the -g flag to specify a cluster group name. JNDI lookups are slightly different too, HA-JNDI uses port 1100 by default. If you are passing properties to a lookup context you will also have the option of using the cluster group name instead of an IP/port.

    hope that helps

  • 4. Re: Need to configure JNDI
    New Gatein Newbie

    I have been going through that documentation. I tried configuring the jndi.properties but the server crashed. The clustering is already in role with apache managing it for now. So I need to remove the clustering from apache and specify jboss to do it for me using the -g flag? Also wud i need to change this 1100 port(in the cluster-service.xml) to 8080(jboss admin) or 8009(apache managed instance) ?
    Is it necessary to pass properties to lookup context and if yes then where?

    Thanks a lot for all the help!!!

  • 5. Re: Need to configure JNDI
    New Gatein Newbie

    I have been going through that documentation. I tried configuring the jndi.properties but the server crashed. The clustering is already in role with apache managing it for now. So I need to remove the clustering from apache and specify jboss to do it for me using the -g flag? Also wud i need to change this 1100 port(in the cluster-service.xml) to 8080(jboss admin) or 8009(apache managed instance) ?
    Is it necessary to pass properties to lookup context and if yes then where?

    Thanks a lot for all the help!!!

  • 6. Re: Need to configure JNDI
    wayne baylor Apprentice

    i just copied cluster-service.xml to my deploy dir, you can get in the server/all/deploy dir. if you look about halfway down it you'll see the HA-JNDI specific stuff.

    once that was deployed, i restarted jboss with something like

    C:\> run.bat -b 0.0.0.0 -g myGroupName
    the -b tells jboss which ip to bind to (0.0.0.0 means 'i don't know just figure it out'). the -g tells jboss which cluster group to join, the default group is DefaultPartition ( you can replace myGroupName with whatever you want).

    you can use an application client to test this. just use the following to get a Context and then perfom a lookup.
    Properties p = new Properties();
    p.put(Context.INITIAL_CONTEXT_FACTORY,
     "org.jnp.interfaces.NamingContextFactory");
    p.put(Context.URL_PKG_PREFIXES, "jboss.naming:org.jnp.interfaces");
    p.put(Context.PROVIDER_URL, "localhost:1100"); // HA-JNDI port.
    return new InitialContext(p);


    you can also pass a list of URLs
    p.put(Context.PROVIDER_URL, "server1:1100,server2:1100,server3:1100,server4:1100");


    instead of specifying the servers in the group, you can just specify the group
    p.put("jnp.partitionName", "myGroupName");


    hope this helps

  • 7. Re: Need to configure JNDI
    New Gatein Newbie

    here's what i have a sample application to test the jboss jndi..

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import javax.naming.InitialContext;
    import javax.naming.Context;
    import java.util.Hashtable;
    import javax.sql.DataSource;

    class test {

    public static void main(String[] args) throws SQLException {
    Connection con = null;
    PreparedStatement stmt = null;
    String query = "SELECT sysdate FROM DUAL";
    try {
    //con = Database.connectWeblogic();
    con = connectJboss();
    stmt = con.prepareStatement(query);
    stmt.execute();
    ResultSet rs = stmt.getResultSet();
    while(rs.next()){
    System.out.println(rs.getString(1));
    }
    }catch(SQLException e){
    e.printStackTrace();
    //System.err.println(e.getMessage());
    throw new SQLException("Fault: Couldn't Fetch Fields");
    }finally {
    //Database.disconnect(con);
    }
    }

    public static Connection connectJboss() throws SQLException {
    Context ctx = null;
    //Hashtable<String, String> ht = new Hashtable<String, String>();
    Hashtable ht = new Hashtable();
    ht.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
    ht.put(Context.PROVIDER_URL, "fb-linux1.corp.adobe.com:8080");
    Connection con = null;
    try {
    ctx = new InitialContext(ht);
    DataSource ds = (DataSource) ctx.lookup("WTSN");
    con = ds.getConnection();
    } catch (Exception e) {
    e.printStackTrace();
    // System.out.println (e.getMessage());
    throw new SQLException("Database connection failed");
    }
    return con;
    }
    }



    i get this error...

    java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory not found in [file:/usr/share/java/libgcj-3.4.3.jar, file:./, core:/]
    at java.net.URLClassLoader.findClass(java.lang.String) (/usr/lib/libgcj.so.5.0.0)
    at gnu.gcj.runtime.VMClassLoader.findClass(java.lang.String) (/usr/lib/libgcj.so.5.0.0)
    at java.lang.ClassLoader.loadClass(java.lang.String, boolean) (/usr/lib/libgcj.so.5.0.0)
    at _Jv_FindClass(_Jv_Utf8Const, java.lang.ClassLoader) (/usr/lib/libgcj.so.5.0.0)
    at java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (/usr/lib/libgcj.so.5.0.0)
    at javax.naming.spi.NamingManager.getInitialContext(java.util.Hashtable) (/usr/lib/libgcj.so.5.0.0)
    at javax.naming.InitialContext.getDefaultInitCtx() (/usr/lib/libgcj.so.5.0.0)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(java.lang.String) (/usr/lib/libgcj.so.5.0.0)
    at javax.naming.InitialContext.lookup(java.lang.String) (/usr/lib/libgcj.so.5.0.0)
    at test.connectJboss() (Unknown Source)
    at test.main(java.lang.String[]) (Unknown Source)
    java.sql.SQLException: Database connection failed
    at test.connectJboss() (Unknown Source)
    at test.main(java.lang.String[]) (Unknown Source)
    Exception in thread "main" java.sql.SQLException: Fault: Couldn't Fetch Fields
    at test.main(java.lang.String[]) (Unknown Source)

    -----------------

    Pls advice how to rectify this!!!

  • 8. Re: Need to configure JNDI
    jaikiran pai Master

    Do you have JBoss related jar files in the client application's classpath? I usually place the jbossall-client.jar (which can be found in the %JBOSS_HOME%/client folder) in the client's classpath. This has all the required JBoss classes.

  • 9. Re: Need to configure JNDI
    New Gatein Newbie

    hi,
    i tried putting that file in the classpath too,
    i use java -classpath.. may be i am not using the correct way. I still get that error!

  • 10. Re: Need to configure JNDI
    jaikiran pai Master

    Post the command that you use to run your java client.