user6920966
user6920966

Reputation: 33

How to setup Mysql connection with JNDI using java in Desktop application

I am use mysql for store my data. My Application is desktop Application java .I want use JNDI for get connection from connection pool. Almost tutorial in internet for JNDI in java Web Application. So in desktop application there is not resource and META-INF folder. How to use JNDI that read config file from my path ?

Thanks

Upvotes: 0

Views: 1182

Answers (1)

Koray Tugay
Koray Tugay

Reputation: 23844

Please check this answer: https://stackoverflow.com/a/21733896/1173112

Maybe this will help you as a kick-off example:

import org.apache.commons.dbcp2.BasicDataSource;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.spi.InitialContextFactory;
import javax.naming.spi.InitialContextFactoryBuilder;
import javax.naming.spi.NamingManager;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;

class MyInitialContext extends InitialContext {
    private Hashtable<String, DataSource> dataSources = new Hashtable<>();

    public MyInitialContext() throws NamingException {
    }

    @Override
    public Object lookup(String name) throws NamingException {
        if (dataSources.isEmpty()) { //init datasources
            final BasicDataSource ds = new BasicDataSource();
            ds.setUrl("jdbc:h2:tcp://localhost:9092/~/h2dbs/studentform");
            ds.setUsername("sa");
            ds.setPassword("");
            dataSources.put("jdbc/studentform", ds);
        }
        if (dataSources.containsKey(name)) {
            return dataSources.get(name);
        }
        throw new NamingException("Unable to find datasource: " + name);
    }
}

class MyInitialContextFactory implements InitialContextFactory {
    @Override
    public Context getInitialContext(Hashtable<?, ?> hashtable)
            throws NamingException {
        final MyInitialContext myInitialContext;
        myInitialContext = new MyInitialContext();
        return myInitialContext;
    }
}

class MyInitialContextFactoryBuilder implements InitialContextFactoryBuilder {
    @Override
    public InitialContextFactory createInitialContextFactory(Hashtable<?, ?> hashtable) {
        final MyInitialContextFactory myInitialContextFactory
                = new MyInitialContextFactory();
        return myInitialContextFactory;
    }
}

public class InitialContextInStandAloneExample {

    public static void main(String[] args) throws NamingException, SQLException {
        final InitialContextFactoryBuilder initialFactoryBuilder
                = new MyInitialContextFactoryBuilder();
        NamingManager.setInitialContextFactoryBuilder(initialFactoryBuilder);

        final InitialContext initialContext = new InitialContext();
        final BasicDataSource bds = 
                (BasicDataSource) initialContext.lookup("jdbc/studentform");

        final Connection connection = bds.getConnection();
        final Statement statement = connection.createStatement();
        final ResultSet resultSet = statement.executeQuery("SELECT * FROM STUDENT");

        while (resultSet.next()) {
            System.out.println(resultSet.getString("FULLNAME"));
        }
    }

}

Upvotes: 1

Related Questions