BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 18 июн 2025, 02:00

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 31 авг 2015, 13:06 
Не в сети

Зарегистрирован: 31 авг 2015, 12:40
Сообщения: 10
Карма: 0
Добрый день уважаемые.
Прошу совета или подсказки в какую сторону смотреть.
Используя 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);
        }
    }

}


ЗЫ
Да, понимаю что проверить наличие интерфейса в базе можно иначе, но мне, пока, достаточно сделать хотя-бы так.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 31 авг 2015, 13:20 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
в доке/вики неспроста выделено жирным:
Цитата:
Обратите внимание: там указывается НЕ package класса, а строка по указанной схеме.

Цитата:
dynservice:<модуль>.<интерфейс_сервиса>=<дин.класс>

common там быть никак не может, <модуль> там наверное будет
Цитата:
ru.bitel.oss.systems.inventory.resource
, посмотрите в клиенте (в логе) какой используется для доступа к этому веб-сервису

так что будет НАВЕРНОЕ
Код:
dynservice:ru.bitel.oss.systems.inventory.resource.DeviceInterfaceService=my.own.service.DeviceInterfaceServiceImpl

но проверьте и уточните какой там модуль в нужном вам вызове

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 31 авг 2015, 14:12 
Не в сети

Зарегистрирован: 31 авг 2015, 12:40
Сообщения: 10
Карма: 0
Благодарю за скорый ответ.
Вариант
Цитата:
dynservice:ru.bitel.oss.systems.inventory.resource.DeviceInterfaceService
я проверял. Не работает.

В журнале единственное что написано это:
Цитата:
AbstractJaxWsHandler - executing ru.bitel.oss.systems.inventory.resource.server.DeviceInterfaceServiceImpl.devicePortUpdate; time => 7 ms.


В общем, буду копать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 31 авг 2015, 15:02 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
не в журнале, а в логах клиента смотрите как вызывается нужный сервис (ну или экшен), зачем тут гадать то

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 31 авг 2015, 15:14 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
если в конфиге всё верно прописано то в логах сервера будет при вызове:
Цитата:
load dynservice class for <...>: <...>...


ещё сервер пробуйте перезагрузить в разных непонятных ситуациях (после смены конфига в данном случае), там бывает залипает в сложных ситуациях в кеше что-нибудь

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 31 авг 2015, 15:23 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Кстати да.
При смене стандартного сервиса на свой - работает после ребута сервера.

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 31 авг 2015, 15:32 
Не в сети

Зарегистрирован: 31 авг 2015, 12:40
Сообщения: 10
Карма: 0
Phricker писал(а):
Кстати да.
При смене стандартного сервиса на свой - работает после ребута сервера.


Означает ли это то, что при изменении значения атрибута dynservice в настройках сервера нужно перезагружать сервер?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 31 авг 2015, 16:17 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Ну я например когда переписывал сервис, отвечающий за смену статуса (ContractStatusMonitorServiceImpl), то даже если мне понадобилось закомментировать строку, то после изменения и компилирования кода для проверки приходилось перезапускать сервер.
Но тестовый и не то стерпит :)

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 31 авг 2015, 16:22 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
linzmen писал(а):
Phricker писал(а):
Кстати да.
При смене стандартного сервиса на свой - работает после ребута сервера.


Означает ли это то, что при изменении значения атрибута dynservice в настройках сервера нужно перезагружать сервер?

да, скорее всего при любых манипуляциях с изменениями сервисов надо бы перезагрузить сервер.
там кешируются ендпойнты для поиска на более верхнем по коду уровне. это есть в todo, но без костылей не получилось сделать тогда.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 14 май 2016, 12:31 
Не в сети
Клиент

Зарегистрирован: 05 ноя 2009, 10:14
Сообщения: 160
Карма: 0
Люди добрые! Поможите чем можете!
Вроде досконально изучил данную тему. Перепробовал все возможные и невозможные варианты, каждый раз перегружая сервер. Ничего не помогает.
Хочу переопределить сервис модуля 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

_________________
Сервер: вер. 7.0.1277 / 23.10.2017 21:20:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101
BGCRM v 3.0 build 1209 from 18.10.2017 06:00:42


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 14 май 2016, 14:56 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
dynservice:ru.bitel.bgbilling.modules.inet.api.InetServService =my.own.InetServServiceImpl
похож на правильный, возможно ещё, нет возможности проверить сейчас:
dynservice:ru.bitel.bgbilling.modules.inet.InetServService =my.own.InetServServiceImpl
цифр там никаких не должно быть.
не в конфиг модуля, надеюсь, это пишете?

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 15 май 2016, 13:05 
Не в сети
Клиент

Зарегистрирован: 05 ноя 2009, 10:14
Сообщения: 160
Карма: 0
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 :(

_________________
Сервер: вер. 7.0.1277 / 23.10.2017 21:20:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101
BGCRM v 3.0 build 1209 from 18.10.2017 06:00:42


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 16 май 2016, 00:44 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
нет, модуль - это то, что передаётся в качестве module при вызове сервиса (или экшена), название jar вообще никакого отношения не имеет к этому (не сразу даже сейчас придумал как его программно узнать можно). один из вариантов выше должен работать, я думаю

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 16 май 2016, 13:26 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Вот правильная настройка, проверил по коду:
Код:
dynservice:ru.bitel.bgbilling.modules.inet.api.InetServService=бла-бла

Проверяйте всё ещё раз. Ищите в логах по подстроке "dynservice class" про загрузку успешную или ошибку.
Проверьте что сервер перезагружается, т.к. настройки поиска endpoint class кешируются и следовательно пытается только первый раз для каждого вызова сервиса искать в конфиге что-то.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [5.2] dynservice на devicePortUpdate
СообщениеДобавлено: 16 май 2016, 15:26 
Не в сети
Клиент

Зарегистрирован: 05 ноя 2009, 10:14
Сообщения: 160
Карма: 0
Хм, странно, но заработало. Спасибо. Вот только толку не будет :( и чего я сразу сюда https://forum.bitel.ru/viewtopic.php?f= ... %3A#p77973 не глянул

_________________
Сервер: вер. 7.0.1277 / 23.10.2017 21:20:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101
BGCRM v 3.0 build 1209 from 18.10.2017 06:00:42


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.045s | 47 Queries | GZIP : On ]