Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разработка веб-сервисов, Часть 2 
:(
    Опции темы
Stampede
Дата 19.4.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(JUncle @  15.4.2006,  10:47 Найти цитируемый пост)
Причем подключение к серверу скорее всего, только http (в принципе, полагаю, что сервер может подключиться к клиенту и каким то иным способом), а клиента необходимо уведомлять о наступлении событий в сервере в некоторые недетерминированные моменты времени.


Уведомление (callback) HTTP клиентов о серверных событиях - это вообще давняя и больная тема. Решения существуют, но достаточно нетривиальные. Хотя сама по себе идея достаточно простая:

Сервер получает запрос, но использует его на для посылки ответа, а удерживает открытое соединение, чтобы сливать туда какие-то сообщения - в том или ином формате. Например, XML, хотя и не обязательно. При такой схеме уже сервер берет бразды праления в свои руки и становится инициатором взаимодействия. Если, например, такой сервлет зарегистрировать как листенера каких-то серверных событий (например, поступление нового заказа), то он может по каждому событию выдавать в канал описание этого заказа.

Задача приемной стороны - слушать канал и интерпретировать поступающие сообщения. В браузере это можно сделать посредством JavaScript объекта HttpXMLRequest (который вовсю используется для разработки AJAX приложений).

Если клиент не браузерный, то принцип остается все равно тот же, открывать HTTP соединение, слушать, интерпретировать и предпринимать какие-то действия. Вот тут я собрал ссылки на ряд ресурсов. в которых обсуждаются детали транспорта, серверного и клиентского программирования:

More no AJAX and server push;
Pushlest: Send events from servlets to DHTML client browsers (статья аж от 2000-го года, но при этом удивительно актуальная!);

Ну и там далее по ссылкам.

Теперь возвращаясь к теме взаимодействия Java сервера и .NET слиента. Поскольку никакой AXIS или SOAP не поможет организовать уведомление клиента штатными средствами, плюс учитывая, что формат данных, как ты говоришь, достаточно простой, то я бы на твоем месте разработал свой простенький XML-протокольчик, и взяв за основу описанный выше метод коммуникации наваял бы фреймворк для асинхронного двустороннего клиент-серверного взаимодействия.

Да, а в части сериализации объектов в XML формат, я бы воспользовался чем-нибудь типа XStream или Burlap/Hessian, тем более что для XStream и Hessian существуют порты на .NET:

XStream for .NET
Hessian implementatations 


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
JUncle
Дата 27.4.2006, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 6.4.2006
Где: Казань, РФ

Репутация: нет
Всего: 1



Stampede, большое спасибо за такой развернутый ответ! То, что нужно!
(эхх... прав мало - плюс бы дать...  smile ).  

Это сообщение отредактировал(а) JUncle - 27.4.2006, 21:05
--------------------
class JUncle extends Man // singleton{/*...*/}
PM MAIL   Вверх
tux
Дата 28.4.2006, 02:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(JUncle @  28.4.2006,  01:56 Найти цитируемый пост)
(эхх... прав мало - плюс бы дать...  smile ).  

Не проблема, дадим. 
PM MAIL Skype GTalk Jabber YIM   Вверх
Aazmandius
Дата 28.8.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


O_o
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 29.4.2006
Где: Vancouver

Репутация: 3
Всего: 6



Вот собрал вышеприведенный пример, долго воевал с различными версиями библиотек, наконец-то нормально скомпилилось и отдеплоилось... Но когда попытался приконнектиться клиентом, получил вот это:
Код

Exception in thread "main" javax.xml.rpc.ServiceException: Only interfaces may be used for the proxy class argument
    at org.apache.axis.client.Service.getPort(Service.java:417)
    at org.apache.axis.client.Service.getPort(Service.java:324)

Подскажите в чем дело пожалуйста, эта тема для меня пока еще очень новая, поэтому сам я чего-то недогоняю...
Как бы сам смысл ошибки ясен, ему нужен интерфейс в качестве прокси, но что конкретно надо менять в коде? Это происходит в момент обращения собственно к службе в строке 
Код

TestWorker twService =  (TestWorker) service.getPort(new QName(portName),TestWorker.class);


 smile забыл интерфейс проимплементить... 

Это сообщение отредактировал(а) Aazmandius - 28.8.2006, 16:47
PM WWW   Вверх
Aazmandius
Дата 28.8.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


O_o
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 29.4.2006
Где: Vancouver

Репутация: 3
Всего: 6



Теперь другая проблема - метод, который должен вернуть строку (наше любимое "Превед, мир!" smile ) возвращает null smile И никаких эксепшнов, все чисто...
PM WWW   Вверх
Aazmandius
Дата 29.8.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


O_o
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 29.4.2006
Где: Vancouver

Репутация: 3
Всего: 6



Зато по методу уважаемого Domestic Cat все работает великолепно =) Хотя хотелось бы конечно понять причину этого null в предыдущем случае...
PM WWW   Вверх
y3u
Дата 10.9.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13



а нет такой же инструкции по работе с вебсервисами на JBoss?  smile 
Уж больно там мануал сухой и не везде понятный. Вот, к примеру как сам сервис поднять я разобрался, а вот клиента к нему сделать не получилось (я пробвал RPC)  smile ... 


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
onsh76
Дата 2.10.2006, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 20.11.2005
Где: Beautiful BC

Репутация: 4
Всего: 5



[QUOTE=Stampede,19.4.2006,  23:02]
Цитата(JUncle @  15.4.2006,  10:47 Найти цитируемый пост)

Да, а в части сериализации объектов в XML формат, я бы воспользовался чем-нибудь типа XStream или Burlap/Hessian, тем более что для XStream и Hessian существуют порты на .NET:

Я согласен со Стампидом - веб сервис с Hessian/Burlap имплементацией просто песня, минимум кода и никаких плясок с бубном.  Испытал на своем проекте, рекомендую...

У меня вопрос к почтенной публике:
Коллеги, скажите, кому довелось поработать с Axis2? Меня интересует, тема асинхронных вызовов... 
Никак AJAX опять прикручивать надо? Нет наверное в мире чудес...   smile 
Проясните, заранее спасибо!

PM MAIL   Вверх
Stampede
Дата 2.10.2006, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



onsh76,  а посмотри на проект JBoss Remoting

Судя по описанию, очень толковая и давно напрашивавшаяся штука: универсальный ремоутинг с конфигурируемым транспортом, подтыкаемыми сериализаторами, асинхронными вызовами, коллбаками (callbacks), интеграцией с JMX и т. д. и т. п.

Может поставляться изолированно, весит немного.

Очень интересно было бы услышать впечатления от использования в реальном проекте.


Это сообщение отредактировал(а) Stampede - 2.10.2006, 19:12
PM WWW   Вверх
Slanix
Дата 11.10.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 30.1.2004

Репутация: нет
Всего: 1



Всем, доброго времечки.А вот такая проблемка. 
Есть Web service (AXIS 1.3, doc/literal) и java клиент. Всё прекрасно работает.
Потребовалось написать .NET клиента. Хорошо, написали запускаем. В итоге получем.
При обращеннии Net клиента SOAP сообщения ходят, но в качестве респонса всегда null (хотя ответ есть).
После такого обращения java клиент не работает, а в частности посылает реквест, а в ответ эксепшн:
org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
Спасает только перезапуск приложения.
--------------------
Я буду искать лица Твоего, Господи Пс.26:8
PM MAIL ICQ YIM   Вверх
seth
Дата 8.12.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 4.6.2006

Репутация: 1
Всего: 1



В чем отличия между например POJO и AXIOM?


--------------------
PM MAIL   Вверх
tux
Дата 8.12.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(seth @  8.12.2006,  16:39 Найти цитируемый пост)
В чем отличия между например POJO и AXIOM? 

Во всем. У них нет совершенно ничего общего.
PM MAIL Skype GTalk Jabber YIM   Вверх
seth
Дата 8.12.2006, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 4.6.2006

Репутация: 1
Всего: 1



Ну а в двух словах?


--------------------
PM MAIL   Вверх
tux
Дата 8.12.2006, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



POJO (Plain Old Java Object) - абревиатура, обозначающая простые классы Java, на которые не налагается никаких ограничений - они не реализуют никаких интерфейсов, к ним не предъявляется никаких требований, просто классы и все.
AXIOM - объектная модель представления XML-данных, аналогичная различным DOM-моделям. Разрабатывалась для Axis 2, но сейчас вроде бы отдельный проект.
Между POJO и AXIOM нет никакой связи, поэтому об отличиях или сходствах говорить как-то странно.
PM MAIL Skype GTalk Jabber YIM   Вверх
rrrookie
Дата 18.1.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 21.6.2006
Где: Rīga

Репутация: нет
Всего: нет



Я немного отойду от актуалЬных обсуждений... 
 У меня вопрос по субй...

РеалЬная ситуация с веб сервисами... 

Например у нас естЬ метод : 

Код

        public  lv.mebius.ws.xsd.GetPersonByNameResponseDocument getPersonByName
                  (
          lv.mebius.ws.xsd.GetPersonByNameDocument param0
          )
         
           {
            GetPersonByNameResponseDocument gpbnr = GetPersonByNameResponseDocument.Factory.newInstance();
            
            CallableStatement cs = null;
            ResultSet rs = null;
            Connection conn = null;
            
            Person personData = null;
            ArrayList personList = new ArrayList();
            
            
            String name = param0.getGetPersonByName().getParam0();
            
            try {
                conn = lv.mebius.ws.db.DBTools.getConnectionPOJO();
                if (conn != null) {
                
                    if (name == null || name.equals("")) {
                        cs = conn.prepareCall("{?=call testPackage.getAllPersons}");
                    } else {
                        cs = conn.prepareCall("{?=call testPackage.getPersonByname(?)}");
                        cs.setString(2, name);
                    }
                    
                    cs.registerOutParameter(1, OracleTypes.CURSOR); // OracleTypes.CURSOR == -10
                    cs.execute();
                    
                    for(rs = (ResultSet)cs.getObject(1);
                        rs.next(); 
                        personList.add(personData)) 
                    {
                            personData = Person.Factory.newInstance();
                            personData.setID(Integer.valueOf(rs.getInt("id")));
                            personData.setName(rs.getString("name"));
                            personData.setLastName(rs.getString("last_name"));
                            personData.setPersCode(rs.getString("pers_code"));
                            personData.setJob(rs.getString("job"));
                    }


                    Person personArray[] = new Person[personList.size()];
                    
                    for(int j = 0; j < personArray.length; j++)
                        personArray[j] = (Person)personList.get(j);
                    
                    gpbnr.getGetPersonByNameResponse().setReturnArray(personArray); 
                }  
            }
            catch(Exception e) {
                gpbnr.getGetPersonByNameResponse().setReturnArray(null); 
            }
            
            finally {
                try {
                    if(cs != null)cs.close();
                    if(rs != null)rs.close();
                    if(conn != null)conn.close();
                }   
                
                catch(Exception exception)
                {}
            }

            return gpbnr; 
                    }


Который отбирает из базы  персон, и кладёт их в обЬект класса GetPersonByNameResponseDocument , который соодержит в себе атрибут Person[].

Так вот, вопрос в том, как поведут себя веб сервисы, если в базе лежат 1 000 000 персон? Судя по архитектуре все ети персоны будут складыватся в оперативную памятЬ (в массив) и толЬко потом из етого будет создан ХМЛ... 

Такая ситуация как то обработана? 
В моём случае как Web Service engine исполЬзуется AXIS2, а веб сервер Tomcat6.

PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.3920 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.