У меня есть Threadpool, чьи запланированные потоки обращаются к пулу redis и выполняют с ним некоторый запрос.
Я создаю экземпляр JedisPool как статический в классе, в котором создается ThreadPool.Я передаю экземпляр JedisPool в качестве параметра при создании каждой задачи.Мой конструктор будет public TestTask(DataSource ds, JedisPool pool, int xx, int yy)
.Поскольку для этой задачи также требуется соединение mysql, я передаю экземпляр источника данных пула соединений mysql.Все эти файлы находятся в "пакагене".
Мой файл server.policy находится в каталоге "/ home / raja / parent_to_package /" и выглядит так:
grant codeBase "file:/home/raja/parent_to_package/" {
permission java.security.AllPermission;
permission java.net.SocketPermission "*:*","connect,resolve";
};
grant codeBase "file:/home/raja/parent_to_package/packagen/" {
permission java.security.AllPermission;
permission java.net.SocketPermission "*:*","connect,resolve";
};
Я запускаюпрограмма из каталога parent_to_package, например
java -Djava.rmi.server.codebase=file:/home/raja/parent_to_package/interface.jar -Djava.rmi.server.hostname=192.168.0.1 -Djava.security.policy=/home/raja/parent_to_package/server.policy -Xmx256m -Xms256m packagen.MainClass
Тем не менее я получаю следующее исключение из дочерних потоков.
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
at redis.clients.util.Pool.getResource(Pool.java:22)
at packagen.TestTask.run(TestTask.java:172)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:573)
at java.security.AccessController.doPrivileged(Native Method)
at java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:570)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:6379 connect,resolve)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
at java.net.Socket.connect(Socket.java:513)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at redis.clients.jedis.Connection.connect(Connection.java:105)
at redis.clients.jedis.Jedis.connect(Jedis.java:1657)
at redis.clients.jedis.JedisPool$JedisFactory.makeObject(JedisPool.java:63)
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:974)
at redis.clients.util.Pool.getResource(Pool.java:20)
... 13 more