java中访问数据源和ejb的方法

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.");
     
     }

 

你可能感兴趣的:(java中访问数据源和ejb的方法)