|
|
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
Запустил серверную часть RMI. Сделал клиента (куда прописал сам вызов и интерфейс как заглушку). Если запускать клиент на одной и той же машине, где работает серверная часть, все нормально работает. Если пытаться достучаться с другой машины, падает на: Код: java 1. (адрес, порт верные (хотя здесь адрес приведен условно), имя сервиса тоже ну и вообще разница только в том, что запуск с другой машины) Ошибка: Код: java 1. 2. 3. Есть версия, что надо все-таки на другой машине как-то подтянуть заглушку? Ну вроде сделал stub, положил этот класс в классы клиентского проекта, но ничего не изменилось, может в проекте нетбинза надо еще как-то явно прицепить эту заглушку к проекту, если вообще в этом дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 09:36 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
JDS, Код: java 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 09:50 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
0FD , изначально "сервер" так и пытался делать, но не вышло - сейчас например если так написать, ругается Код: java 1. 2. Поэтому в итоге написал без UnicastRemoteObject.exportObject, просто rebind new RemoteServiceImpl, но видимо, все-таки надо exportObject - это наверно, как выставить наружу скелет класса на приемнике. По sealing violation нашел только такое Прописал в манифест проекта в нетбинзе: Name: org.tst.rmi Sealed: false Ошибка осталась. Где-то еще встречал вариант с неким SecurityManagerom, может оно, но не найду теперь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 10:22 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
Пишут еще: A sealing violation means that some classes from a sealed package were loaded from two different locations (directories or jar files). A sealed package is one that essentially says "I know that all classes in this package come from a single jar file. For security reason no other location may provide classes that are in this package". Chances are you have two Oracle JDBC driver jars in your classpath Что-то вроде все классы в пакете должны быть из одного jar-а, но суть все равно не ясна. При чем тут безопасность, мы ж берем вполне конкретный класс проекта? :/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 10:41 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
JDS, Чтобы запретить доступ к членам класс у которых доступ на уровне пакета, для этого sealed и нужен. Кто-то написал класс pkg1.Clazz{static int i;}, а поместив свой класс в пакет pkg1 вы уже имеет доступ к i, а с sealed=true уже нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 11:14 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
1. Кинь под спойлер весь исходный код. 2. Что про секьюрити менеджер говорит в туториале: https://docs.oracle.com/javase/tutorial/rmi/implementing.html Creating and Installing a Security Manager The main method's first task is to create and install a security manager, which protects access to system resources from untrusted downloaded code running within the Java virtual machine. A security manager determines whether downloaded code has access to the local file system or can perform any other privileged operations. If an RMI program does not install a security manager, RMI will not download classes (other than from the local class path) for objects received as arguments or return values of remote method invocations. This restriction ensures that the operations performed by downloaded code are subject to a security policy. Here's the code that creates and installs a security manager: if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 11:44 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
Чтобы запретить доступ к членам класса, у которых доступ на уровне пакета Т.е. в пакет входит кучка классов с методами объявленными как: public со static и просто. Нам надо выставить для пакета sealed=true, чтобы если кто-то как-то добавит в наш пакет свой класс, у него бы не было возможности достать public-методы классов, которые уже были там ранее? Механизм не понятен пока, но как в нетбинзе выставить этот sealed=true? Руками в манифесте? Пробовал прописать в manifest.mf проекта: Name: org\tst\rmi\ Sealed: true не решило. Или надо создать отдельный файл в src проекта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 12:03 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
JDS, Я про publiс ничего не говорил, только про protected и без модификатора. Дайте код и как разбито по проектам. В одном месте Name: org.tst.rmi, в другом Name: org\tst\rmi\, но кажется должно быть Name: org/tst/rmi/ и Sealed: false ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 12:22 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevЧто про секьюрити менеджер говорит в туториале Спасибо. Попробовал запустить, как описано там в примере, просто дописав: Код: java 1. 2. 3. В итоге получилась процедура регистрации: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. И теперь ошибка другая на той же строке: Код: java 1. Нужно еще давать права какие-то? Ничего не ясно. Как вообще работал тогда "клиент", кот. запускался на этой же машине ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 12:23 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
Точно, туплю. Код: java 1. Просто: Код: java 1. Запустился. Но теперь при запросе с клиента тоже ругается на java.net.SocketPermission ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 12:34 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
JDS...И теперь ошибка другая на той же строке на следующей, на rebind. У меня так же. т.ч. я тоже без сеьюрити Сейчас сам с RMI занимаюсь... До этого на одной машинке игрался, сейчас пытаюсь на Amazon EC2 порты для RMI в I-net открыть, пока не получается ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 12:49 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev , теперь убрал из кода запуска "сервера" инициализацию SecurityManager и теперь тоже нормально запускается, уже не ругаясь package org.tst.rmi is sealed и на клиенте на пемишн теперь тоже не ругается, теперь ругается на заглушку или что там еще: Код: java 1. Т.е. ругается уже на вызов метода, коннект прошел. Про SecurityManager так и не ясно что это было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 12:57 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
Пробился через Internet... полет нормальный. Без секьюрити. Никаких ошибок. Что на одном хосте, что на разных. Как пробивался: 1. Открыл порт для RMI регистри (у меня 7000) и порты для RMI классов-серверов (у меня 7001-....) для доступа извне через Amazon EC2 Console 2. Т.к. на сервере у Amazon EC2 два IP адреса: внутренний (собственно адрес сервера) внешний статический IP адрес Amazon Elastic IPs То, что бы клиент правильно лез на внешний IP адрес, пришлось сделать финт ушами и создать классы ServerSocketFactory (просто заглушка) и ClientSocketFactory. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 3. Создаю личную registry и регистрирую класс в ней Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 4. Получаю его на клиенте Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. И все работает. Никаких секьюрити менеджеров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 13:32 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
JDSjava.io.NotSerializableException Ты уверен, что у тебя все классы которые ты передаешь в remote объявлены как: class MyClass implements java.io.Serializable { ... } Ошибка выглядит совершенно банальной: не смог сделать marshal'инг объекта, т.к. он NotSerializable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 13:38 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
Если есть не null ссылка на объект (если null то ошибок нет) и класс объекта не Serializable, то получаю ошибку: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 13:57 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev , это читал и изначально сделал класс с имплементом Serializable. В конечном итоге все получилось (опять))), когда по-человечески сгенерил заглушку с помощью rmic, указал -classpath и -d (куда класть). Потом получившиеся класс *Impl, интерфес и заглушки положил в классы проекта клиента на другой машине и все пошло. Возможно, дело в том, что ранее до меня rmic-ом была сгенерирована заглушка класса того же имени, что создал я, поэтому когда генерил заглушку почему-то подхватывался старый класс. В общем темные пятна еще остались, но немного лучше ) Надо теперь научиться как в нетбинзе несколько классов проекта засунуть в отдельный Jar, если это вообще реально ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 16:45 |
|
||
|
RMI error unmarshalling return; NotSerializableException
|
|||
|---|---|---|---|
|
#18+
Я заглушки не генерю (и генерить не буду). Мне RMI нужен просто как связь между различными JVM (в дальнейшем серверами). Т.ч. все классы проекта будут доступны на всех машинах - не жалко ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2015, 17:20 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39123179&tid=2124578]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
160ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 539ms |

| 0 / 0 |
