在SessionBean中可以访问,代码类似如下:
 private Connection getConnection() throws java.sql.SQLException {
        try {
            javax.sql.DataSource ds = (javax.sql.DataSource)     ctx.lookup("java:comp/env/*");
            return ds.getConnection();
        } catch(NamingException ne) {
            log("UNABLE to get a connection from demoPool!");
            log("Please make sure that you have setup the connection pool properly");
            throw new EJBException(ne);
        }
    }其中*是你在weblogic中的DataSource名。

解决方案 »

  1.   

    对,在Session Bean中不再用DriverManager得到Connection了,而是采用ConnectionPool方式的,这样可以提高性能,又可以统一获取连接的方式,简化编程。
        /**
         * Gets JDBC connection from the connection pool.
         * @return The JDBC connection
         */
        private Connection getConnection() throws Exception {
            try {
                javax.sql.DataSource ds = (javax.sql.DataSource)
                ctx.lookup("java:comp/env/jdbc/在配置文件定义的名字");
                return ds.getConnection();
            }catch (Exception e) {
                System.err.println("Couldn't get datasource!");
                e.printStackTrace();
                throw e;
            }
        }
      

  2.   

    icjq(cartoon)
    你说的不对吧,通过
    javax.sql.DataSource ds = (javax.sql.DataSource)     ctx.lookup("*");
    这样才是jdni的名字吧
    如果通过环境变量的方式来访问,必须在xml描述器里做一些设置才行
    javax.sql.DataSource ds = (javax.sql.DataSource)     ctx.lookup("java:comp/env/*");
      

  3.   

    ejb—jar.xml
                <resource-ref>
                    <description />
                    <res-ref-name>jdbc/160</res-ref-name>
                    <res-type>javax.sql.DataSource</res-type>
                    <res-auth>Container</res-auth>
                </resource-ref>
    weblogic-ejb-jar.xml
            <reference-descriptor>
                <resource-description>
                    <res-ref-name>jdbc/160</res-ref-name>
                    <jndi-name>160</jndi-name>
                </resource-description>
            </reference-descriptor>只有做了这样的关联,才能
    dataSource = (DataSource)envCtx.lookup("jdbc/160");
    否则只能
    dataSource = (DataSource)envCtx.lookup("160");
    而且,ctx初始化的方法也不一样你这么说容易误导别人吧
      

  4.   

    313fxq(313fxq) :小弟我初次用J2EE ,
    javax.sql.DataSource ds = (javax.sql.DataSource)  ‘ORACLE需要数据
    源吗?它不是自带监听程序TNS吗??
     ctx.lookup("java:comp/env/jdbc/在配置文件定义的名字");
      

  5.   

    to hotenM
    我的回答(“其中*是你在weblogic中的DataSource名”)的确有问题!(可能是我常用默认值的缘故)经过你的更正相信libotao明白了吧!
    不过在lookup时,你作为资源引用,如果不加上“java:comp/env”,我不知道能不能lookup到,提出质疑,因为我没试过,不吝赐教!
    还有,我看很多书上在做映射都以jdbc这个前缀开头(包括你的解答),不知道为什么。我试过在lookup中,只要做好了映射,不必加上jdbc/也可以lookup到!
      

  6.   

    libotao(呢喃) :
    这里与Oracle是没有关系的,你现在的程序配置在J2EE应用服务器上面,由应用服务器可以实现很多功能,而且应用服务器充当Adaptor的作用,这里的数据源就是从应用服务器上取得,应用服务器自己再同Oracle打交道,建立好连接池,你只要从应用服务器去数据源连接就可以了。
      

  7.   

    这个Connection返回的对象能持续多久??
    我怎么每次用的时候(我自己编写了一些内部函数 session bean)都要连接一次???
    说 connection 已经断开。
      

  8.   

    请问在sun的j2ee1.3server上面,连接数据库,还需要在resource.properties这个文件里面,进行例如连接cloudscape的jdbcDataSource.5.name=jdbc/ExampleDB
    jdbcDataSource.5.url=jdbc:cloudscape:rmi:ExampleDB;create=true
    jdbcDriver.0.name=COM.cloudscape.core.RmiJdbcDriver
    jdbcXADataSource.0.name=jdbc/XACloudscape
    jdbcXADataSource.0.classname=COM.cloudscape.core.RemoteXaDataSource
    的设置。
    那么如果在程序中连接oracle,上述设置如何进行?