繁体   English   中英

如何在Oracle 10g Java VM中设置并发调用

[英]How to setup concurrent calls in Oracle 10g Java VM

如果有人可以解释我如何正确配置plsql java包装器,当不同的数据库用户调用相同的过程来确保正确的并发资源访问处理时。

DBMS和JAVA:Oracle 10g,内部JavaVM 1.4.2

我有一个拥有1个shema所有者的MyDatabse和10个用户连接的用户:
的dbowner
DBUSER01
DBUSER02
...
DBUSER10

我有PL / SQL包装程序:my_package.getUser()包装UserHandler.getUser()

我用loadjava上传到MyDatabase的java类UserHandler:

public class UserHandler {
    private static final int MAX_USER_COUNT = 10;
    private static final String USERNAME_TEMPLATE = "EIS_ORA_20";
    private static int currentUserSeed = 0;
    /**
    * Generates EIS user according to pattern agreed by EIS developers. It
    * circles user pool with round-robin method ensuring concurrent calls.
    * 
    * @return valid EIS USERNAME
    */
    synchronized public static String getUser() {
        String newUser = USERNAME_TEMPLATE + currentUserSeed;    
        currentUserSeed++;    
        currentUserSeed = currentUserSeed % MAX_USER_COUNT;    
        return newUser;    
    }    
}    

包装器的想法是确保将外部信息系统用户名正确分发到与Oracle Forms Client Application连接到MyDatabase的DBUSERS。

我的问题是,当5个用户完全调用过程my_package.getUser()时,我得到了:

DBUSER01 - 调用my_package.getUser()返回EIS_ORA_200
DBUSER02 - 调用my_package.getUser()返回EIS_ORA_200
DBUSER03 - 调用my_package.getUser()返回EIS_ORA_200
DBUSER04 - 调用my_package.getUser()返回EIS_ORA_200
DBUSER05 - 调用my_package.getUser()返回EIS_ORA_200

我被期望每个DBUSER会得到不同的用户(因为我在我的JUnit测试中确认多个并发线程调用UserHandler.getUser())。 后来我发红了plsql包装器调用可以在2个maner中设置:

  1. 在DBUSERS或之间共享java内存空间
  2. 为每个DBUSER分隔内存空间

我的结论是,UserHandler类分别为每个DBUSER加载,这就是我没有使用静态计数器和同步方法的原因。

如何配置MyDatabase以强制调用my_package.getUser()为每个DBUSER使用相同的java空间?

非常感谢你!

我不相信有任何方法可以配置Oracle在多个用户会话之间共享JVM。 Java开发人员指南10g指出:

Oracle JVM模型

即使成千上万的用户连接到服务器并运行相同的Java代码,每个用户都会体验它,就像他在自己的JVM上运行自己的Java代码一样......

通常,在RDBMS中的会话之间共享数据的适当方法是使用数据库对象。 在这种情况下,最简单的方法是使用Oracle序列,启用minvalue 1,maxvalue 10和循环。 您可以直接在Java代码中从序列中进行选择。

另一种方法是简单地生成1到10之间的均匀分布的随机数。如果有足够的会话,那么随着时间的推移,这应该均匀地分配会话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM