How to bind / lookup DataSource via JNDI without container

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

How to bind / lookup DataSource via JNDI without container

Christopher Gokey
I’m working on a unit test which talks to MySQL. I’m trying to bind/lookup a datasource via JNDI and the code
 below works with Tomcat, note it makes reference to org.apache.naming.java.javaURLContextFactory, which is
a tomcat class.  I’m able to bind the datasource without issues.

 How can I do this with Jetty factory class so I don’t have to have any tomcat dependencies, I’ve switched everything
over to Jetty but this.

I tried using “org.eclipse.jetty.jndi.java.javaURLContextFactory" thinking it might be similar for the INITIAL_CONTEXT_FACTORY,
but I get a:
Cannot instantiate class: org.eclipse.jetty.jndi.java.javaURLContextFactory
So It doesn’t appear quite as simple as swapping one out for the other.

Any help here would be greatly appreciated.
Thanks,
Chris


package test

import org.apache.commons.dbcp.BasicDataSource;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import org.apache.commons.dbcp.BasicDataSource;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;


public class DataStoreSetup {

    public static void main(String argv[]) {
        DataStoreSetup.bindDataStore();
    }
    public static void bindDataStore() {
        // setup the jndi context and the datasource
        try {
            // Create initial context
            System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
                    "org.eclipse.jetty.jndi.java.javaURLContextFactory");
            System.setProperty(Context.URL_PKG_PREFIXES,
                    "org.apache.naming");

            InitialContext ic = new InitialContext();

            try {
                ic.lookup("java:comp/env/jdbc/myDB");
            } catch (javax.naming.NameNotFoundException e) {
                ic.createSubcontext("java:");
                ic.createSubcontext("java:comp");
                ic.createSubcontext("java:comp/env");
                ic.createSubcontext("java:comp/env/jdbc");

                String driverClassName = System.getenv("JDBC_DRIVER_CLASSNAME");
                String jdbcUrl = System.getenv("JDBC_URL");
                String jdbcUserName = System.getenv("JDBC_USERNAME");
                String jdbcPassword = System.getenv("JDBC_PASSWORD");
                BasicDataSource bds = new BasicDataSource();
                bds.setDriverClassName(driveClassName);
                bds.setUrl(jdbcUrl);
                bds.setUsername(jdbcUserName);
                bds.setPassword(jdbcPassword);
                Connection conn = bds.getConnection();
                System.out.println("Connection = "+conn);
                ic.bind("java:comp/env/jdbc/myDB", bds);
            }
        } catch (Exception ex)
        {
            System.err.println(ex.getMessage());
        }
    }
}




--
 

_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users
Reply | Threaded
Open this post in threaded view
|

Re: How to bind / lookup DataSource via JNDI without container

Joakim Erdfelt-8

Joakim Erdfelt / [hidden email]

On Thu, Dec 21, 2017 at 11:25 AM, Christopher Gokey <[hidden email]> wrote:
I’m working on a unit test which talks to MySQL. I’m trying to bind/lookup a datasource via JNDI and the code
 below works with Tomcat, note it makes reference to org.apache.naming.java.javaURLContextFactory, which is
a tomcat class.  I’m able to bind the datasource without issues.

 How can I do this with Jetty factory class so I don’t have to have any tomcat dependencies, I’ve switched everything
over to Jetty but this.

I tried using “org.eclipse.jetty.jndi.java.javaURLContextFactory" thinking it might be similar for the INITIAL_CONTEXT_FACTORY,
but I get a:
Cannot instantiate class: org.eclipse.jetty.jndi.java.javaURLContextFactory
So It doesn’t appear quite as simple as swapping one out for the other.

Any help here would be greatly appreciated.
Thanks,
Chris


package test

import org.apache.commons.dbcp.BasicDataSource;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import org.apache.commons.dbcp.BasicDataSource;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;


public class DataStoreSetup {

    public static void main(String argv[]) {
        DataStoreSetup.bindDataStore();
    }
    public static void bindDataStore() {
        // setup the jndi context and the datasource
        try {
            // Create initial context
            System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
                    "org.eclipse.jetty.jndi.java.javaURLContextFactory");
            System.setProperty(Context.URL_PKG_PREFIXES,
                    "org.apache.naming");

            InitialContext ic = new InitialContext();

            try {
                ic.lookup("java:comp/env/jdbc/myDB");
            } catch (javax.naming.NameNotFoundException e) {
                ic.createSubcontext("java:");
                ic.createSubcontext("java:comp");
                ic.createSubcontext("java:comp/env");
                ic.createSubcontext("java:comp/env/jdbc");

                String driverClassName = System.getenv("JDBC_DRIVER_CLASSNAME");
                String jdbcUrl = System.getenv("JDBC_URL");
                String jdbcUserName = System.getenv("JDBC_USERNAME");
                String jdbcPassword = System.getenv("JDBC_PASSWORD");
                BasicDataSource bds = new BasicDataSource();
                bds.setDriverClassName(driveClassName);
                bds.setUrl(jdbcUrl);
                bds.setUsername(jdbcUserName);
                bds.setPassword(jdbcPassword);
                Connection conn = bds.getConnection();
                System.out.println("Connection = "+conn);
                ic.bind("java:comp/env/jdbc/myDB", bds);
            }
        } catch (Exception ex)
        {
            System.err.println(ex.getMessage());
        }
    }
}




--
 

_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users


_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users
Reply | Threaded
Open this post in threaded view
|

Re: How to bind / lookup DataSource via JNDI without container

Christopher Gokey
Thanks Joakim,

I stumbled across another article on the net that helped me out regarding this as well.   I’ll post it for reference for anyone else trying to do the same thing.

Chris


On Dec 21, 2017, at 2:43 PM, Joakim Erdfelt <[hidden email]> wrote:


Joakim Erdfelt / [hidden email]

On Thu, Dec 21, 2017 at 11:25 AM, Christopher Gokey <[hidden email]> wrote:
I’m working on a unit test which talks to MySQL. I’m trying to bind/lookup a datasource via JNDI and the code
 below works with Tomcat, note it makes reference to org.apache.naming.java.javaURLContextFactory, which is
a tomcat class.  I’m able to bind the datasource without issues.

 How can I do this with Jetty factory class so I don’t have to have any tomcat dependencies, I’ve switched everything
over to Jetty but this.

I tried using “org.eclipse.jetty.jndi.java.javaURLContextFactory" thinking it might be similar for the INITIAL_CONTEXT_FACTORY,
but I get a:
Cannot instantiate class: org.eclipse.jetty.jndi.java.javaURLContextFactory
So It doesn’t appear quite as simple as swapping one out for the other.

Any help here would be greatly appreciated.
Thanks,
Chris


package test

import org.apache.commons.dbcp.BasicDataSource;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import org.apache.commons.dbcp.BasicDataSource;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;


public class DataStoreSetup {

    public static void main(String argv[]) {
        DataStoreSetup.bindDataStore();
    }
    public static void bindDataStore() {
        // setup the jndi context and the datasource
        try {
            // Create initial context
            System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
                    "org.eclipse.jetty.jndi.java.javaURLContextFactory");
            System.setProperty(Context.URL_PKG_PREFIXES,
                    "org.apache.naming");

            InitialContext ic = new InitialContext();

            try {
                ic.lookup("java:comp/env/jdbc/myDB");
            } catch (javax.naming.NameNotFoundException e) {
                ic.createSubcontext("java:");
                ic.createSubcontext("java:comp");
                ic.createSubcontext("java:comp/env");
                ic.createSubcontext("java:comp/env/jdbc");

                String driverClassName = System.getenv("JDBC_DRIVER_CLASSNAME");
                String jdbcUrl = System.getenv("JDBC_URL");
                String jdbcUserName = System.getenv("JDBC_USERNAME");
                String jdbcPassword = System.getenv("JDBC_PASSWORD");
                BasicDataSource bds = new BasicDataSource();
                bds.setDriverClassName(driveClassName);
                bds.setUrl(jdbcUrl);
                bds.setUsername(jdbcUserName);
                bds.setPassword(jdbcPassword);
                Connection conn = bds.getConnection();
                System.out.println("Connection = "+conn);
                ic.bind("java:comp/env/jdbc/myDB", bds);
            }
        } catch (Exception ex)
        {
            System.err.println(ex.getMessage());
        }
    }
}




--
 

_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users

_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users


_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users