JDNI浅尝辄止

JNDI全名为Java Naming and Directory Interface.JNDI
主要提供应用程序所需要资源上命名与目录服务.在Java EE环境中,JNDI扮演了一个很重要的角色,   
它提供了一个接口让用户在不知道资源所在位置的情形下,取得该资源服务.   
就好比网络磁盘驱动器的功能一样。
如果有人事先将另一台机器上的磁盘驱动器接到用户的机器上,
用户在使用的时候根本就分辨不出现在的驱动器是存在本端,   
还是在另一端的机器上,用户只需取得资源来用,根本就不知道资源在什么地方。   
JNDI这个接口基本上是LDAP,LDAP全名为Lightweight Directory Access Protocol

//常用的JNDI操作:
//绑定:把名称同对象关联的过程
void bind(String sName,Object object); 
//重新绑定:用来把对象同一个已经存在的名称重新绑定
void rebind(String sName,Object object); 
//释放:用来把对象从目录中释放出来
void unbind(String sName); 
//查找:返回目录总的一个对象
void lookup(String sName,Object object); 
//重命名:用来修改对象名称绑定的名称
void rename(String sOldName,String sNewName); 
//清单:返回绑定在特定上下文中对象的清单列表
NamingEnumeration listBinding(String sName); 


package com.zl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

//一个使用JNDI得到数据源的Demo
public class DemoAction extends ActionSupport {

	private static final long serialVersionUID = -8057562697271631827L;
	
	private String name;
	private String password;
	
	public String index(){
		// TODO Auto-generated method stub
		String result = SUCCESS;
	    Connection conn;
		try {
			conn = getConnectionByJNDI();
			String sql = "SELECT id,name,password FROM demo where name = ? and password = ?";
			PreparedStatement pst = conn.prepareStatement(sql);
			pst.setString(1, name);
			pst.setString(2, password);
			ResultSet rs = pst.executeQuery();
			if(rs.next()){
				System.out.println("编号:"+rs.getInt("id"));
				ActionContext.getContext().getSession().put("u_name", rs.getString("name"));
			}else{
				ActionContext.getContext().put("msg", "用户名或密码错误");
				result = INPUT;
			}
			closeDB(conn, pst, rs);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}
	
	public String login() {
		// TODO Auto-generated method stub
		Connection conn;
		try {
			conn = getConnectionByJNDI();	
			String sql = "insert into demo values(demo_seq.nextval,?,?)";
			PreparedStatement pst = conn.prepareStatement(sql);
			pst.setString(1, name);
			pst.setString(2, password);
			pst.executeUpdate();		
			ActionContext.getContext().put("msg", "注册成功");
			closeDB(conn, pst, null);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return INPUT;
	}
	
	private static void closeDB(Connection conn,Statement st,ResultSet rs) throws Exception{
		if(conn != null) conn.close();
		if(st != null) st.close();
		if(rs != null) rs.close();
	}
	
	private static Connection getConnectionByJNDI() throws Exception{
		Properties p = new Properties();
	    p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
		p.put(Context.PROVIDER_URL, "t3://localhost:7001");
		Context ctx = new InitialContext(p);
		javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("oracleDS");
		Connection conn = ds.getConnection();
		return conn;
	}
	/////////////
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}



由于数据源配置在Weblogic中,所以需要wl中的支持jar

你可能感兴趣的:(java,sql,应用服务器,weblogic,网络应用)