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