java.io.IOException: Socket Closed

classic Classic list List threaded Threaded
11 messages Options
man2000 man2000
Reply | Threaded
Open this post in threaded view
|

java.io.IOException: Socket Closed

При вызове:

JISession session = JISession.createSession("that.domain","username1","password1");
JIComServer comServer = new JIComServer(JIProgId.valueOf("V81.COMConnector"),"server1.that.domain",session);

Получаю:
Exception in thread "main" org.jinterop.dcom.common.JIException: An internal error occurred. [0x8001FFFF]
        at org.jinterop.dcom.core.JIComServer.init(JIComServer.java:576)
        at org.jinterop.dcom.core.JIComServer.initialise(JIComServer.java:481)
        at org.jinterop.dcom.core.JIComServer.<init>(JIComServer.java:414)
        at Test.main(Test.java:2)
Caused by: java.io.IOException: Socket Closed
        at rpc.DefaultConnection.receiveFragment(DefaultConnection.java:383)
        at rpc.DefaultConnection.receive(DefaultConnection.java:85)
        at rpc.ConnectionOrientedEndpoint.receive(ConnectionOrientedEndpoint.java:226)
        at rpc.ConnectionOrientedEndpoint.bind(ConnectionOrientedEndpoint.java:180)
        at rpc.ConnectionOrientedEndpoint.rebind(ConnectionOrientedEndpoint.java:152)
        at org.jinterop.dcom.transport.JIComEndpoint.rebindEndPoint(JIComEndpoint.java:40)
        at org.jinterop.dcom.core.JIComServer.init(JIComServer.java:565)
        ... 3 more

Причём для вызова:

JISession session = JISession.createSession("my.domain","username2","password2");
JIComServer comServer = new JIComServer(JIProgId.valueOf("V81.COMConnector"),"server2.my.domain",session);

всё работает !!!


Настройки COM объектов "V81.COMConnector" на обоих серверах - АБСОЛЮТНО ОДИНАКОВЫЕ !!! (буквально скопированы соответствующие ветки реестра Windows), оба пользователя "username1" и "username2" являются администраторами соответствующих серверов "server1" и "server2".

Единственная разница в том, что в обоих случаях вызов происходит с рабочей станции из "my.domain", т.е. в первом случае вызов идёт в "неродной" домен. По журналам Windows на серверах видно, что пользователь в обоих случаях успешно входит в систему, и никаких ошибок в журналах НЕТ !


Прошу подсказать: "в какую сторону копать" (хотя бы примерно) ?
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: java.io.IOException: Socket Closed

Добрый вечер!
1) Домены "доверенные"?
2) Пользователи доменные или локальные?
3) Пользователи домена "А" могут заходить в домен "Б"?
------
PS:
Попробуйте включить более полное логирование j-interop. ... хотя это уже к jcif относится.
OCTitbit developer.
man2000 man2000
Reply | Threaded
Open this post in threaded view
|

Re: java.io.IOException: Socket Closed

На уровне сетей Windows всё вроде бы нормально: домены "my.domain" и "that.domain" доверенные, пользователи, естественно, доменные (локальным пользователям доступ в сеть запрещён групповой политикой безопасности) и пользователи одного домена могут "ходить" и в другой, хотя это не мой случай: я использую для входа на сервер "server1.that.domain" учётную запись из его же домена.
Системный журнал сервера "server1.that.domain" показывает, что пользователь "username1" успешно регистрируется на сервере.

Не нашёл, к сожалению, как включить "более полное логгирование j-Interop", пожелания разработчикам вроде бы были на их форуме, но реализации в моей версии 2.08 нет... или я просто не знаю как это сделать. Выдача в консоли была, конечно, по-длиннее, чем я привёл, могу дать её всю:


06.07.2011 8:42:28 org.jinterop.dcom.common.JISystem logSystemPropertiesAndVersion
INFO: j-Interop Version = j-Interop 2.08

06.07.2011 8:42:28 org.jinterop.dcom.common.JISystem logSystemPropertiesAndVersion
INFO: java.runtime.name = Java(TM) SE Runtime Environment
sun.boot.library.path = C:\JAVA\jre6\bin
java.vm.version = 19.1-b02
java.vm.vendor = Sun Microsystems Inc.
java.vendor.url = http://java.sun.com/
path.separator = ;
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg = sun.io
sun.java.launcher = SUN_STANDARD
user.country = RU
sun.os.patch.level = Service Pack 2
java.vm.specification.name = Java Virtual Machine Specification
user.dir = C:\JAVA\eclipseProj\jInteropTest
java.runtime.version = 1.6.0_24-b07
java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs = C:\JAVA\jre6\lib\endorsed
os.arch = amd64
java.io.tmpdir = C:\Users\ALEXAN~1.MEL\AppData\Local\Temp\
line.separator =

java.vm.specification.vendor = Sun Microsystems Inc.
user.variant =
os.name = Windows Vista
sun.jnu.encoding = Cp1251
java.library.path = C:\JAVA\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Oracle_11gR2\Home\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Windows Imaging\;C:\JAVA\jdk1.6.0_24\bin
java.specification.name = Java Platform API Specification
java.class.version = 50.0
sun.management.compiler = HotSpot 64-Bit Server Compiler
os.version = 6.0
user.home = C:\Users\alexander.melnikov
user.timezone = Europe/Moscow
java.awt.printerjob = sun.awt.windows.WPrinterJob
file.encoding = Cp1251
java.specification.version = 1.6
java.class.path = C:\JAVA\eclipseProj\jInteropTest\bin;C:\JAVA\eclipseProj\jInteropTest\lib\j-interop.jar;C:\JAVA\eclipseProj\jInteropTest\lib\j-interopdeps.jar;C:\JAVA\eclipseProj\jInteropTest\lib\jcifs-1.2.19.jar
user.name = alexander.melnikov
java.vm.specification.version = 1.0
java.home = C:\JAVA\jre6
sun.arch.data.model = 64
user.language = ru
java.specification.vendor = Sun Microsystems Inc.
awt.toolkit = sun.awt.windows.WToolkit
java.vm.info = mixed mode
java.version = 1.6.0_24
java.ext.dirs = C:\JAVA\jre6\lib\ext;C:\Windows\Sun\Java\lib\ext
sun.boot.class.path = C:\JAVA\jre6\lib\resources.jar;C:\JAVA\jre6\lib\rt.jar;C:\JAVA\jre6\lib\sunrsasign.jar;C:\JAVA\jre6\lib\jsse.jar;C:\JAVA\jre6\lib\jce.jar;C:\JAVA\jre6\lib\charsets.jar;C:\JAVA\jre6\lib\modules\jdk.boot.jar;C:\JAVA\jre6\classes
java.vendor = Sun Microsystems Inc.
file.separator = \
java.vendor.url.bug = http://java.sun.com/cgi-bin/bugreport.cgi
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.endian = little
sun.desktop = windows
sun.cpu.isalist = amd64

06.07.2011 8:42:28 org.jinterop.dcom.core.JISession createSession
INFO: Created Session: 1295973822
06.07.2011 8:42:28 org.jinterop.dcom.common.JISystem saveDBPathAndLoadFile
INFO: progIdVsClsidDB: {}
06.07.2011 8:42:28 org.jinterop.dcom.core.JISession$Release_References_TimerTask run
INFO: Release_References_TimerTask:[RUN] Session:  1295973822 , listOfDeferencedIpids.size(): 0
06.07.2011 8:42:28 org.jinterop.dcom.core.JIComOxidRuntime$ClientPingTimerTask run
INFO: Running ClientPingTimerTask !
06.07.2011 8:42:28 org.jinterop.dcom.core.JIComOxidRuntime$ServerPingTimerTask run
INFO: Running ServerPingTimerTask !
06.07.2011 8:42:29 rpc.DefaultConnection processOutgoing
INFO:
 Sending BIND
06.07.2011 8:42:29 rpc.DefaultConnection processIncoming
INFO:
 Recieved BIND_ACK
06.07.2011 8:42:29 rpc.DefaultConnection processOutgoing
INFO:
 Sending REQUEST
06.07.2011 8:42:29 rpc.DefaultConnection processIncoming
INFO:
 Recieved RESPONSE
06.07.2011 8:42:29 rpc.DefaultConnection processOutgoing
INFO:
 Sending REQUEST
06.07.2011 8:42:29 rpc.DefaultConnection processIncoming
INFO:
 Recieved RESPONSE
06.07.2011 8:42:29 rpc.DefaultConnection processOutgoing
INFO:
 Sending REQUEST
06.07.2011 8:42:29 rpc.DefaultConnection processIncoming
INFO:
 Recieved RESPONSE
06.07.2011 8:42:29 rpc.DefaultConnection processOutgoing
INFO:
 Sending REQUEST
06.07.2011 8:42:29 rpc.DefaultConnection processIncoming
INFO:
 Recieved RESPONSE
06.07.2011 8:42:29 rpc.DefaultConnection processOutgoing
INFO:
 Sending REQUEST
06.07.2011 8:42:29 rpc.DefaultConnection processIncoming
INFO:
 Recieved RESPONSE
06.07.2011 8:42:29 org.jinterop.dcom.common.JISystem internal_dumpMap
INFO: mapOfHostnamesVsIPs: {}
06.07.2011 8:42:29 rpc.DefaultConnection processOutgoing
INFO:
 Sending BIND
06.07.2011 8:42:29 rpc.DefaultConnection processIncoming
INFO:
 Recieved BIND_ACK
06.07.2011 8:42:29 rpc.DefaultConnection processOutgoing
INFO:
 Sending AUTH3
06.07.2011 8:42:30 rpc.DefaultConnection processOutgoing
INFO:
 Sending ALTER_CTX
Exception in thread "main" org.jinterop.dcom.common.JIException: An internal error occurred. [0x8001FFFF]
        at org.jinterop.dcom.core.JIComServer.init(JIComServer.java:576)
        at org.jinterop.dcom.core.JIComServer.initialise(JIComServer.java:481)
        at org.jinterop.dcom.core.JIComServer.<init>(JIComServer.java:414)
        at Test.main(Test.java:22)
Caused by: java.io.IOException: Socket Closed
        at rpc.DefaultConnection.receiveFragment(DefaultConnection.java:383)
        at rpc.DefaultConnection.receive(DefaultConnection.java:85)
        at rpc.ConnectionOrientedEndpoint.receive(ConnectionOrientedEndpoint.java:226)
        at rpc.ConnectionOrientedEndpoint.bind(ConnectionOrientedEndpoint.java:180)
        at rpc.ConnectionOrientedEndpoint.rebind(ConnectionOrientedEndpoint.java:152)
        at org.jinterop.dcom.transport.JIComEndpoint.rebindEndPoint(JIComEndpoint.java:40)
        at org.jinterop.dcom.core.JIComServer.init(JIComServer.java:565)
        ... 3 more


Вообще-то надо бы к разработчикам j-Interop обратиться за помощью, но с английским у меня "не очень", боюсь не поймут. Так что извините, я уж тут пишу.
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: java.io.IOException: Socket Closed

In reply to this post by man2000
А пользователю другого домена разрешается подключаться к DCOM-у? см. dcomcnfg
OCTitbit developer.
man2000 man2000
Reply | Threaded
Open this post in threaded view
|

Re: java.io.IOException: Socket Closed

In reply to this post by man2000
man2000 wrote
... я использую для входа на сервер "server1.that.domain" учётную запись из его же домена ...
т.е. пользователь "user1" (из домена "that.domain") заходит на сервер "server1.that.domain", а он там обладает АДМИНСКИМИ ПРАВАМИ, и, естественно, имеет все права на использование DCOM-объектов этого сервера. Правда клиентское приложение j-Interop работает на станции "workstation.my.domain", т.е. в другом домене.

Пробовал и по-другому: "user2" (из домена "my.domain") заходит на сервер "server1.that.domain", а он тоже обладает АДМИНСКИМИ ПРАВАМИ, и, естественно, имеет все права на использование DCOM-объектов этого сервера. Результат одинаков: java.io.IOException: Socket Closed
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: java.io.IOException: Socket Closed

В разрешениях DCOM-а он прописан или входит в разрешенную группу? То что он админ еще "естественно" не значит, что ему можно использовать dcom. Хотя тут не access denied, но проверить стоит.

В bug-tracker на sourceforge у j-interop описан подобный баг, но он НЕ был связан с доменами, и "Socet closed" проявлялось уже после установления соединения. Тем не менее этот баг был исправлен еще в 2008.

ИМХО надо гуглить "DCOM cross domain connection issue".

А сама задача то какая если не секрет? (можно на email) Просто может как-то по другому можно сделать.
OCTitbit developer.
man2000 man2000
Reply | Threaded
Open this post in threaded view
|

Re: java.io.IOException: Socket Closed

Благодарю за совет "гуглить "DCOM cross domain connection issue"" - почитал... Думаю, что это разработчикам j-Interop и jcifs ближе, я-то прикладные задачи реализую, на WCF даже и не "замахиваюсь".

Пробовал, конечно, пользователей включать и в специфичную группу "Пользователи DCOM" - ничего это не меняет.

Обойти эту проблему в моём случае можно: достаточно перенести станцию, с которой запускается клиентское приложение в домен DCOM-сервера или наоборот сервер перенести в домен станции. Так и будет сделано, если иное решение не будет найдено.
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: java.io.IOException: Socket Closed

Как вариант, попробуйте соединится с проблемным хостом без доменов - прямо IP и из под локального пользователя. Может это не в доменах дело.

А по поводу гугл, не обижайтесь. Я просто сам не адим.
OCTitbit developer.
man2000 man2000
Reply | Threaded
Open this post in threaded view
|

Re: java.io.IOException: Socket Closed

In reply to this post by man2000
Да не-е-е, я совершенно искренне поблагодарил Вас за то, что сформулировали мне поисковую фразу для Гугля - сам я бы не придумал так его спросить.

man2000 wrote
... локальным пользователям доступ в сеть запрещён групповой политикой безопасности ...
Первым делом и пробовал подключаться как локальный пользователь (ведь в OCTitbit нет опции задания домена) - не "прокатывает".

Так что и просьба есть: ввести в OCTitbit в oce.properties параметр domain
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: java.io.IOException: Socket Closed

C OCTitbit-ом проще, опцию домена добавлю в ближайшее время. Но вот с cross domain тут уж надо экспериментировать. Попробую сформулировать вопрос в j-interop. Если что-то изменится, то тоже держите в курсе.
OCTitbit developer.
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: java.io.IOException: Socket Closed

Кстати... попался один баг-репорт на глаза. Там была проблема с самим Windows. На машинах был разный набор hotfix-ов. В итоге все вылечилось установкой фикспаков.
OCTitbit developer.