如何在Oracle 10g Java VM中设置并发调用
如果有人可以解释我如何正确配置plsql
java包装器,当不同的数据库用户调用相同的过程来确保正确的并发资源访问处理时.
DBMS和JAVA:Oracle 10g,内部JavaVM 1.4.2 我有一个拥有1个shema所有者的MyDatabse和10个用户连接的用户: 我有PL / SQL包装程序: 我用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()时,我得到了:
我被期望每个DBUSER会得到不同的用户(因为我在我的JUnit测试中确认多个并发线程调用UserHandler.getUser()). >在DBUSERS或之间共享java内存空间 我的结论是,UserHandler类分别为每个DBUSER加载,这就是我没有使用静态计数器和同步方法的原因. 如何配置MyDatabase以强制调用my_package.getUser()为每个DBUSER使用相同的java空间? 非常感谢你! 解决方法我不相信有任何方法可以配置Oracle在多个用户会话之间共享JVM. Java开发人员指南10g指出:
通常,在RDBMS中的会话之间共享数据的适当方法是使用数据库对象.在这种情况下,最简单的方法是使用Oracle序列,启用minvalue 1,maxvalue 10和循环.您可以直接在Java代码中从序列中进行选择. 另一种方法是简单地生成1到10之间的均匀分布的随机数.如果有足够的会话,那么随着时间的推移,这应该均匀地分配会话. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |