Java 如何通过WebSphereORB调用获得数据库连接?

Java 如何通过WebSphereORB调用获得数据库连接?,java,jakarta-ee,websphere,websphere-7,websphere-6.1,Java,Jakarta Ee,Websphere,Websphere 7,Websphere 6.1,我有一个WebSphere6.1集群环境,它由两个节点组成,每个节点有两个AppServer。让我们调用包括服务器1(2809)和服务器2(2810),节点B(包括服务器3(2811)和服务器4(2812))。同时,我用JNDIlocal\u db创建了一个集群范围的数据源 现在我想通过上述环境中的WAS ORB调用在java客户机中获得数据库连接。java代码的特定部分如下所示: Hashtable env = new Hashtable(); env.put(

我有一个WebSphere6.1集群环境,它由两个节点组成,每个节点有两个AppServer。让我们调用包括服务器1(2809)和服务器2(2810),
节点B(包括服务器3(2811)和服务器4(2812)
)。同时,我用JNDI
local\u db
创建了一个集群范围的数据源

现在我想通过上述环境中的WAS ORB调用在java客户机中获得数据库连接。java代码的特定部分如下所示:

        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
        env.put(Context.PROVIDER_URL,"iiop://localhost:2809");  

        javax.sql.DataSource ds = (DataSource)initialContext.lookup("local_db");

        Connection cn = ds.getConnection();
  • 如果上面的java客户机代码运行,数据库连接检索请求是否会遵循所有应用服务器的四个连接池之间的负载平衡规则

  • 此外,如果我的java客户机成功地获得一个数据库连接,然后运行一个大的SQL查询并返回大的结果,那么对于内存空间占用,应用程序服务器将负责哪个?由于上面使用的端口2809或返回数据库连接的目标服务器,仅服务器1

  • 顺便说一句,如果我为
    提供者的URL
    放置两个服务器成员,例如
    iiop://localhost:2809,localhost:2810
    ,这是指负载平衡还是故障切换

    如果我理解错误,请帮助解释和纠正我


  • 谢谢

    让我从简单的开始,接着讲剩下的

  • 拥有两个提供程序URL意味着故障转移。如果无法连接到第一个命名服务器,它将连接到第二个命名服务器,并一直持续到该列表的末尾。请注意,故障转移是为了连接到命名服务器(而不是资源本身)
  • 查找是在您连接到的服务器上完成的。本地数据库表示该服务器上的数据源(及其连接池)。您将使用server1(当您连接到该NS时),并将从该服务器上承载的数据源获得连接

    您将永远无法从其他服务器获得任何连接。换句话说,没有负载平衡(一个请求使用来自服务器1的连接,另一个请求使用来自服务器2的连接等)。我相信这就是你在上面的问题中所说的负载平衡


    HTH

    A
    数据源既不可远程访问,也不可序列化。因此,如果从服务器上查找
    local_db
    ,它将返回一个
    javax.naming.Reference
    ,客户端使用该引用创建一个与服务器上配置相同的新的
    实例。这也意味着一旦执行了查找,任何JDBC方法都不会向WebSphere服务器发送请求。

    感谢您的回复@Manglu,正如您所说,这里没有数据库连接检索的负载平衡。那么对于EJB资源请求呢?如果我要查找EJB资源,那么负载平衡会发生吗?WebSphereWLM似乎可以处理这个问题,但我不确定是否可以。支持WLM的客户机发挥了神奇的作用。Java客户机(和容器)是良好的WLM感知客户机。EJB调用返回的存根包含有关承载EJB的所有服务器的相关信息。当客户端调用EJB时,它使用这些信息为您执行WLM-