forum.bitel.ru http://forum.bitel.ru/ |
|
[5.2] dynservice на devicePortUpdate http://forum.bitel.ru/viewtopic.php?f=44&t=10839 |
Страница 1 из 1 |
Автор: | linzmen [ 31 авг 2015, 13:06 ] |
Заголовок сообщения: | [5.2] dynservice на devicePortUpdate |
Добрый день уважаемые. Прошу совета или подсказки в какую сторону смотреть. Используя dynservice пытаюсь переопределить работу метода portUpdate Нужно чтобы при создании очередного интерфейса на устройстве выполнялась проверка на наличие ранее созданного интерфейса с таким же названием. В случае если интерфейс с таким названием есть достаточно вывести сообщение об ошибке. Нашёл нужный метод devicePortUpdate в ru.bitel.oss.systems.inventory.resource.common.DeviceInterfaceService. Использую dynservice для перегрузки своей реализацией метода. Однако, результата никакого не получаю. В журнале нет ни строчки о том, что новый метод был вызван. В конфигурации сервера указано: Код: dynservice:ru.bitel.oss.systems.inventory.resource.common.DeviceInterfaceService=my.own.service.DeviceInterfaceServiceImpl Код сервиса: Код: @WebService(endpointInterface = "ru.bitel.oss.systems.inventory.resource.common.DeviceInterfaceService") public class DeviceInterfaceServiceImpl extends ru.bitel.oss.systems.inventory.resource.server.DeviceInterfaceServiceImpl implements DeviceInterfaceService { private static final Logger logger = Logger.getLogger(DeviceInterfaceServiceImpl.class); @Override public void devicePortUpdate(DeviceInterface port) throws BGException { logger.debug("devicePortUpdate MID: " + this.moduleId); try { /** * Проверить наличие интерфейса с таким title. * Если интерфейс найден, запретить его создавать. */ Statement pst = this.getSlaveConnection().createStatement(); String sql = "SELECT 1 FROM inv_device_port_" + this.moduleId + " WHERE title='" + port.getTitle() + "'"; logger.debug("devicePortUpdate SQL: " + sql); ResultSet result = pst.executeQuery(sql); if (result.first()) { throw new BGException("Вы не можете зарезервировать интерфейс " + port.getSubscriberTitle() + ", так как такой интерфейс уже существует."); } super.devicePortUpdate(port); } catch (SQLException e) { logger.error(e.getMessage()); throw new BGException(e); } } } ЗЫ Да, понимаю что проверить наличие интерфейса в базе можно иначе, но мне, пока, достаточно сделать хотя-бы так. |
Автор: | dimOn [ 31 авг 2015, 13:20 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
в доке/вики неспроста выделено жирным: Цитата: Обратите внимание: там указывается НЕ package класса, а строка по указанной схеме. Цитата: dynservice:<модуль>.<интерфейс_сервиса>=<дин.класс> common там быть никак не может, <модуль> там наверное будет Цитата: ru.bitel.oss.systems.inventory.resource , посмотрите в клиенте (в логе) какой используется для доступа к этому веб-сервисутак что будет НАВЕРНОЕ Код: dynservice:ru.bitel.oss.systems.inventory.resource.DeviceInterfaceService=my.own.service.DeviceInterfaceServiceImpl но проверьте и уточните какой там модуль в нужном вам вызове |
Автор: | linzmen [ 31 авг 2015, 14:12 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
Благодарю за скорый ответ. Вариант Цитата: dynservice:ru.bitel.oss.systems.inventory.resource.DeviceInterfaceService я проверял. Не работает. В журнале единственное что написано это: Цитата: AbstractJaxWsHandler - executing ru.bitel.oss.systems.inventory.resource.server.DeviceInterfaceServiceImpl.devicePortUpdate; time => 7 ms. В общем, буду копать... |
Автор: | dimOn [ 31 авг 2015, 15:02 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
не в журнале, а в логах клиента смотрите как вызывается нужный сервис (ну или экшен), зачем тут гадать то |
Автор: | dimOn [ 31 авг 2015, 15:14 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
если в конфиге всё верно прописано то в логах сервера будет при вызове: Цитата: load dynservice class for <...>: <...>... ещё сервер пробуйте перезагрузить в разных непонятных ситуациях (после смены конфига в данном случае), там бывает залипает в сложных ситуациях в кеше что-нибудь |
Автор: | Phricker [ 31 авг 2015, 15:23 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
Кстати да. При смене стандартного сервиса на свой - работает после ребута сервера. |
Автор: | linzmen [ 31 авг 2015, 15:32 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
Phricker писал(а): Кстати да. При смене стандартного сервиса на свой - работает после ребута сервера. Означает ли это то, что при изменении значения атрибута dynservice в настройках сервера нужно перезагружать сервер? |
Автор: | Phricker [ 31 авг 2015, 16:17 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
Ну я например когда переписывал сервис, отвечающий за смену статуса (ContractStatusMonitorServiceImpl), то даже если мне понадобилось закомментировать строку, то после изменения и компилирования кода для проверки приходилось перезапускать сервер. Но тестовый и не то стерпит ![]() |
Автор: | dimOn [ 31 авг 2015, 16:22 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
linzmen писал(а): Phricker писал(а): Кстати да. При смене стандартного сервиса на свой - работает после ребута сервера. Означает ли это то, что при изменении значения атрибута dynservice в настройках сервера нужно перезагружать сервер? да, скорее всего при любых манипуляциях с изменениями сервисов надо бы перезагрузить сервер. там кешируются ендпойнты для поиска на более верхнем по коду уровне. это есть в todo, но без костылей не получилось сделать тогда. |
Автор: | dmitry_P [ 14 май 2016, 12:31 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
Люди добрые! Поможите чем можете! Вроде досконально изучил данную тему. Перепробовал все возможные и невозможные варианты, каждый раз перегружая сервер. Ничего не помогает. Хочу переопределить сервис модуля Inet. По методе описанной здесь, смотрю в логе клиента его вызов: хттп://IP:port/bgbilling/executer/ru.bitel.bgbilling.modules.inet.api/27/InetServService?wsdl -> {http://service.common.api.inet.modules.bgbilling.bitel.ru/}InetServService:inetServUpdate 27 - id экземпляра модуля В конфе ставил: dynservice:ru.bitel.bgbilling.modules.inet.api.InetServService =my.own.InetServServiceImpl dynservice:ru.bitel.bgbilling.modules.inet.api.27.InetServService =my.own.InetServServiceImpl dynservice:ru.bitel.bgbilling.modules.inet.api/27.InetServService =my.own.InetServServiceImpl да что только не ставил! Код никакой: import javax.jws.WebService; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.common.BGMessageException; import ru.bitel.bgbilling.modules.inet.api.common.service.InetServService; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServOption; @WebService(endpointInterface = "ru.bitel.bgbilling.modules.inet.api.common.service.InetServService") public class InetServServiceImpl extends ru.bitel.bgbilling.modules.inet.api.server.service.InetServServiceImpl implements InetServService { @Override public int inetServUpdate(InetServ inetServ, java.util.List<InetServOption> optionList, boolean generateLogin, boolean generatePassword, long saWaitTimeout) throws BGException { throw new BGMessageException( "бла-бла-бла" ); } } компилится без ошибок. Но до него дело не доходит. Не перехватывается в общем. В логах сервера только выполнение родного класса. Чего ему надо то? Клиент: вер. 5.2 сборка 1237 от 14.12.2015 13:56:40 os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_17 Сервер: вер. 5.2 сборка 1643 от 02.11.2015 16:37:29 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_31 |
Автор: | dimOn [ 14 май 2016, 14:56 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
dynservice:ru.bitel.bgbilling.modules.inet.api.InetServService =my.own.InetServServiceImpl похож на правильный, возможно ещё, нет возможности проверить сейчас: dynservice:ru.bitel.bgbilling.modules.inet.InetServService =my.own.InetServServiceImpl цифр там никаких не должно быть. не в конфиг модуля, надеюсь, это пишете? |
Автор: | dmitry_P [ 15 май 2016, 13:05 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
dimOn писал(а): не в конфиг модуля, надеюсь, это пишете? Нет, конечно в общий конфиг. У меня уже есть несколько dynaction (с ними проще) и по вашему примеру из вики один dynservice для ContractStatusMonitorService. Все работает нормально. И вызов сервиса ContractStatusMonitorService я сравнивал с логом клиента, тут все без вопросов, совпадает. Меня смущает другое. Судя по доке в этой строке dynservice:<модуль>.<интерфейс_сервиса>=<дин.класс> фраза <модуль>, по идее, указывает на jar с классом интерфейса. Класс ContractStatusMonitorService и класс для порта девайса из начала темы (что-то там ru.bitel.oss.systems.inventory...) лежат в kernel.jar и, в этом случае, указатель на модуль вроде как не нужен. А нужный мне класс в inet.jar. Значит, по идее, должно быть что-то вроде: dynservice:inet.ru.bitel.bgbilling.modules.inet.api.InetServService =my.own.InetServServiceImpl Но я перепробовал все вариации и на эту тему. Ничего не помогает. Что-то как-то запутано все и до конца не разжевано нигде. Help me if you can, I'm feeling down ![]() |
Автор: | dimOn [ 16 май 2016, 00:44 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
нет, модуль - это то, что передаётся в качестве module при вызове сервиса (или экшена), название jar вообще никакого отношения не имеет к этому (не сразу даже сейчас придумал как его программно узнать можно). один из вариантов выше должен работать, я думаю |
Автор: | dimOn [ 16 май 2016, 13:26 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
Вот правильная настройка, проверил по коду: Код: dynservice:ru.bitel.bgbilling.modules.inet.api.InetServService=бла-бла Проверяйте всё ещё раз. Ищите в логах по подстроке "dynservice class" про загрузку успешную или ошибку. Проверьте что сервер перезагружается, т.к. настройки поиска endpoint class кешируются и следовательно пытается только первый раз для каждого вызова сервиса искать в конфиге что-то. |
Автор: | dmitry_P [ 16 май 2016, 15:26 ] |
Заголовок сообщения: | Re: [5.2] dynservice на devicePortUpdate |
Хм, странно, но заработало. Спасибо. Вот только толку не будет ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |