1、jsp中访问jdbc别名的方法
1.1在tomcat中
首先要在tomcat中的server.xml中配置jndi,数据源的名称为jdbc/bn
<!--文件名为conpool.jsp 测试数据源-->
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="java.sql.*"%>
<%
DataSource ds = null;
try{
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
//从Context中lookup数据源。
ds = (DataSource)envCtx.lookup("jdbc/bn");
if(ds!=null)
{
out.println("已经获得DataSource!");
out.println("<br>");
Connection conn = ds.getConnection();
Statement stmt=conn.createStatement();
ResultSet rst=stmt.executeQuery("select * from book");
out.println("以下是从数据库中读取出来的数据");
while(rst.next())
{
out.println("bookName:"+rst.getString("bookName"));
out.println("<br>");
}
}
else
out.println("连接失败!");
}
catch(Exception ne)
{
out.println(ne);
}
%>
1.2在weblogic中,首先配置jndi,数据源名称为jdbc/mssql,则访问方法:
Context initCtx = new InitialContext();
//从Context中lookup数据源。
ds = (DataSource)initCtx.lookup("jdbc/bn");
即可,没有测试过在tomcat中,这样是否可以!
如果jsp所在的服务器和数据源所在的服务器不在同一台计算机上,如何访问?下面的方法可以访问:
public java.sql.Connection getDBConnection() {
/**@todo Complete this method*/
Connection dbConnection =null;
DataSource ds = null;
Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://localhost:7001");//localhost是指配置数据源的计算机名字或IP
try {
//从Context中lookup数据源
ctx = new InitialContext(ht);
ds = (javax.sql.DataSource) ctx.lookup ("jdbc/mssql");
dbConnection= ds.getConnection();
} catch (SQLException ex) {
System.out.println("search jndi error:"+ex.toString());
} catch (Exception e) {
System.out.println("search jndi error:"+e.toString());
}
return dbConnection;
}
2、ejb的查找方法
2.1在一个jar包中的查找方法,即如果本ejb实体和要访问的ejb在同一个jar文件中,可以这样访问。
Context initContext = null;
try {
initContext = new InitialContext();
//OrderFormRemote是ejb_jar.xml中描述的关于OrderForm的JNDI名称
Object orRef = initContext.lookup("OrderFormRemote");
orderHome = (OrderFormHome) PortableRemoteObject.narrow(orRef,OrderFormHome.class);
}
catch(Exception eoi){
eoi.printStackTrace();
}
2.2不在一个jar包中的查找方法,这时所访问的ejb可以在另外的服务器上!(Applicatin Server为Weblogic)
import java.util.Properties;
import javax.naming.Context;
import javax.rmi.PortableRemoteObject;
Context context=null;
String url = "t3://localhost:7001";//localhost为所要访问的ejb所在的计算机名称或IP
String user = null;
String password = null;
Properties properties = null;
try{
properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, url);
if (user != null) {
properties.put(Context.SECURITY_PRINCIPAL, user);
properties.put(Context.SECURITY_CREDENTIALS,
password == null ? "" : password);
}
context= new javax.naming.InitialContext(properties);
//BookRemote是ejb_jar.xml中描述的关于Book的JNDI名称
//bookHome 为BookHome类型的对象,
Object ref = context.lookup("BookRemote");
bookHome = (BookHome) PortableRemoteObject.narrow(ref,BookHome.class);
}
catch (Exception e) {
System.out.println("Unable to connect to WebLogic server at " + url);
System.out.println("Please make sure that the server is running.");
}