RMI - проблема разрешения сокета дочерних потоков Threadpool - PullRequest
0 голосов
/ 06 мая 2011

У меня есть 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

1 Ответ

0 голосов
/ 08 мая 2011

Я не думаю, что ваши спецификации codeBase верны, если вы используете файл jar, и я не думаю, что ваши SocketPermissions правильно указывают порт host: Проверьте документацию.

...