开发者社区> 问答> 正文

我想在jBoss里面用ZooKeeper做分布式锁,结合ehcache做缓存共享?报错

报错:

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;
}


展开
收起
爱吃鱼的程序员 2020-06-14 20:15:41 963 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    弄好了,我自己回答吧

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

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

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

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

    非常感谢,解决我的问题

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

    二、WEB-CONSOLE的安全配置  

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

    2020-06-14 20:15:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
《MSE 微服务网关》 立即下载
微服务引擎 MSE 治理中心重磅发布 立即下载
阿里云微服务引擎 MSE 2.0 线上发布 立即下载