我想在jBoss里面用ZooKeeper做分布式锁,结合ehcache做缓存共享用的,遇到报错不懂了

发布于 2021-11-22 15:39:44 字数 3002 浏览 838 评论 3

报错:

10:34:20,712 INFO  [ZooKeeper] Initiating client connection, connectString=192.168.0.141:2180,192.168.0.22:2181 sessionTimeout=3000 watcher=org.menagerie.DefaultZkSessionManager$SessionWatcher@14349ae

10:34:20,942 ERROR [UsersRolesLoginModule] Failed to load users/passwords/role files
java.io.IOException: No properties file: users.properties or defaults: defaultUsers.properties found
at org.jboss.security.auth.spi.Util.loadProperties(Util.java:198)
at org.jboss.security.auth.spi.UsersRolesLoginModule.loadUsers(UsersRolesLoginModule.java:186)
at org.jboss.security.auth.spi.UsersRolesLoginModule.createUsers(UsersRolesLoginModule.java:200)
at org.jboss.security.auth.spi.UsersRolesLoginModule.initialize(UsersRolesLoginModule.java:127)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:756)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
at javax.security.auth.login.LoginContext.login(LoginContext.java:579)
at org.apache.zookeeper.Login.login(Login.java:292)
at org.apache.zookeeper.Login.<init>(Login.java:93)
at org.apache.zookeeper.client.ZooKeeperSaslClient.createSaslClient(ZooKeeperSaslClient.java:226)
at org.apache.zookeeper.client.ZooKeeperSaslClient.<init>(ZooKeeperSaslClient.java:131)
at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:949)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1003)
10:34:20,943 WARN  [ClientCnxn] SASL configuration failed: javax.security.auth.login.LoginException: Missing users.properties file. Will continue connection to Zookeeper server without SASL authentication, if Zookeeper server allows it.

10:34:20,946 INFO  [ClientCnxn] Opening socket connection to server 192.168.0.141/192.168.0.141:2180

就是这一步的时候报错:

csAccessor.lock();//就是这一步的时候报错:
csAccessor.put(Long.valueOf("123"),new AlertSession());
boolean a = csAccessor.containsKey(Long.valueOf("456"));
boolean b = csAccessor.containsKey(Long.valueOf("123"));
csAccessor.unlock();


获取锁的方法:

public static Lock getZKLock(){
ZkSessionManager manager = new DefaultZkSessionManager(connectionString, timeout);
Lock lock = Locksmith.reentrantLock(manager, lockPath);
return lock;
}


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

秉烛思 2021-11-27 12:29:48

我已经按照http://duqiangcise.iteye.com/blog/780450里面的

二、WEB-CONSOLE的安全配置 

配置了,还是没有用,看来不是这个问题,有人知道是怎么回事吗?

终止放荡 2021-11-27 11:28:19

非常感谢,解决我的问题

看透却不说透 2021-11-26 11:54:18

弄好了,我自己回答吧

我觉得是因为zookeeper是一个外部应用,当它放到jBoss里面用了以后,肯定要通过容器向系统申请资源吧,所以就默认要使用sasl和jass(暂时还搞不清楚他们两的关系,大概是混合使用的一套安全模式)。如果没有在这套安全模式里面给zookeeper做配置,那就会报错了,就像我这样。

解决这个问题有两套思路,一种是给zookeeper做安全配置,怎么配我也搞不清楚,只知道应该是在jboss-5.1.0.GAserverdefaultconflogin-config.xml里面配的。

另外一种就是让zookeeper绕过sasl安全机制,直接向系统获取资源。具体就是只要在第一次调用锁之前执行这行代码就可以了:System.setProperty("zookeeper.sasl.client", "false"); 

具体可以参见官网的这个修正:https://issues.apache.org/jira/browse/ZOOKEEPER-1657

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文