forum.bitel.ru
http://forum.bitel.ru/

ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevice (CRM)
http://forum.bitel.ru/viewtopic.php?f=19&t=9514
Страница 1 из 1

Автор:  weasel [ 30 июл 2014, 18:39 ]
Заголовок сообщения:  ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevice

Стоит задача переезда с IPN на Inet, адаптирую скрипт конвертирования IPN-хозяйства в сущности INET и одно место вызывает головную боль:

Код:
ServerContext   context     = ServerContext.get();   
wsDevice    = context.getService( InetDeviceService.class, 13 );
List<InetDevice> inetDevicelist = new ArrayList<InetDevice>();
inetDevicelist.addAll( wsDevice.deviceList( INET_MIKROTIK_DEVICE_TYPE_ID ) );


При сохранении динкода компилятор жалуется, что deviceList возвращает ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevice, вместо InetDevice, по маны/форум и гугл о существовании этого класса (InvDevice) не знают, у кого-нить есть его описание или альтернатива для получения списка InetDevice-ов вместо deviceList?

Автор:  Amir [ 30 июл 2014, 19:13 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

Недавно произошло разделение дерева устройств на дерево и библиотеку устройств. API изменилось.
На данный момент, если микротики в дереве не являются дочерними друг к другу, то
inetDevicelist.addAll( wsDevice.inetDeviceRoot( null, null, Collections.singleton( INET_MIKROTIK_DEVICE_TYPE_ID ), null, null, null, null, null, null, false, false ).getChildren() );
Если же есть микротик дочерний к другому микротику, то придется еще по листу пробежаться чтобы у каждого InetDevice вытащить его getChildren().

Автор:  weasel [ 31 июл 2014, 12:32 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

За ответ - спасибо, помогло и в продолжение к теме,
Код:
device.setHost( hostPort );         
device.setPassword( gate.getKeyword() );                        
device.setUsername( gateSetup.get( "login", "root" ) );
device.setComment( gate.getComment() );         
device.setDeviceTypeId( INET_MIKROTIK_DEVICE_TYPE_ID );         
device.setParentId( INET_ROOT_DEVICE_ID );
device.setTitle( Device.generateTitle( device, type ) );
device.setIdentifier( gate.getComment() );
device.setSecret( "" );
device.setConfig( config );
device.setDeviceGroupIds( new HashSet<Integer>() );
int id = wsDevice.inetDeviceUpdate( device, false );   


Данный код при выполнении wsDevice.inetDeviceUpdate( device, false ); даёт ошибку
Код:
ru.bitel.bgbilling.common.BGException: Column 'identifier' cannot be null [23000, 1048]

gate.getComment() не пустой, проверял.
Есть сомнения по поводу inetDeviceUpdate (в оригинальном скрипте был deviceUpdate), в чём могут быть грабли?

#ПРИМ: device это экземлпяр InetDevice

Автор:  weasel [ 31 июл 2014, 13:30 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

Хм, а если для этих опций использовать setInv... тогда работает,

Код:
device.setInvHost( hostPort );         
device.setInvDeviceTypeId( INET_MIKROTIK_DEVICE_TYPE_ID );         
device.setInvTitle( Device.generateTitle( device, type ) );
device.setInvIdentifier( gate.getComment() );
device.setInvConfig( config );
device.setInvDeviceGroupIds( new HashSet<Integer>() );

Автор:  Amir [ 31 июл 2014, 15:06 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

Да, надо inv.
invHost - это host в invDevice.
host в inetDevice - это который в редакторе переопределение, т.е. его можно оставить null.
Но при этом если вызвать у inetDevice getHost() - если host null - он вернет invHost.

Из-за обратной совместимости с ServiceActivator'ами небольшая путаница возникла.

Автор:  weasel [ 31 июл 2014, 17:37 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

Продолжая начатое, есть какие нить изменения в методе inetServUpdate класса InetServService?

При попытке создать сервис:

Код:
InetServ serv = new InetServ();
serv.setContractId( cid );
serv.setComment( "IMPORT FROM IPN" );
serv.setDateFrom( now.getTime() );
serv.setDateTo( now.getTime() );
serv.setLogin( "" );
serv.setPassword( "" );
serv.setStatus( InetServ.STATUS_ACTIVE );
serv.setTypeId( 1 );
serv.setDeviceId(37);
serv.setAddressFrom( start );
serv.setAddressTo( end );
wsServ.inetServUpdate( serv, new ArrayList<InetServOption>(), false, false, 0 );


в лог сыпется примерно следующее:

Код:
07-31/17:22:26 ERROR [http-bio-0.0.0.0-8080-exec-10] debug - Error while updating  service  for contract 5379:null
java.lang.NullPointerException
   at ru.zebratelecom.inet.dyn.debug.execute(debug.java:164)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:606)
   at ru.bitel.bgbilling.kernel.dynamic.server.DynamicCodeServiceImpl.run(DynamicCodeServiceImpl.java:329)
   at sun.reflect.GeneratedMethodAccessor373.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:606)
   at ru.bitel.bgbilling.kernel.container.service.server.ServiceInfo.invoke(ServiceInfo.java:101)
   at ru.bitel.bgbilling.kernel.container.ws.server.AbstractJaxWsHandler.invoke(AbstractJaxWsHandler.java:244)
   at ru.bitel.bgbilling.kernel.container.ws.server.JaxWsHandler.access$1(JaxWsHandler.java:1)
   at ru.bitel.bgbilling.kernel.container.ws.server.JaxWsHandler$2.run(JaxWsHandler.java:336)
   at java.security.AccessController.doPrivileged(Native Method)
   at javax.security.auth.Subject.doAs(Subject.java:415)
   at ru.bitel.bgbilling.kernel.container.ws.server.JaxWsHandler.invoke(JaxWsHandler.java:330)
   at ru.bitel.bgbilling.kernel.container.ws.server.AbstractJaxWsHandler$ServiceInstanceResolver$1.invoke(AbstractJaxWsHandler.java:356)
   at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:150)
   at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:261)
   at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:100)
   at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:641)
   at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:600)
   at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:585)
   at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:482)
   at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:314)
   at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:608)
   at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:259)
   at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:162)
   at ru.bitel.common.server.JaxWSAdapter.handle(JaxWSAdapter.java:388)
   at bitel.billing.server.Executer.doPost(Unknown Source)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
   at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
   at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
   at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
   at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
   at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
   at java.lang.Thread.run(Thread.java:745)


Не исключаю, что что-то не указано в настройках модуля Inet, но по выдаваемой ошибке идей куда копать нету(

Автор:  weasel [ 31 июл 2014, 21:10 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

Ну или можно перефразировать вопрос, у кого нить есть рабочий пример создания INET сервиса на договоре

Автор:  weasel [ 01 авг 2014, 10:46 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

Вопрос снят, ответ комрада Amir'a из соседней ветки (?f=19&t=6958?f=19&t=6958) решил проблему

Автор:  Угрюмов Роман [ 11 авг 2014, 16:31 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

Господа!!! А у вас из таблицы inv_device_1 удаляется устройство? Я удалил устройство в админке в модуле Inet, перечитал на серверах,
а в таблице устройство осталось, соответственно функция
List<InvDevice> deviceList = deviceService.deviceList(deviceTypeId);
Возвращает удаленное устройство!!!
Разобрался, вы новый функционал с библиотеками ввели

Автор:  Угрюмов Роман [ 11 авг 2014, 17:07 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

Господа! Все же странности творятся при создании устройства! Устройство создается в inv_device
в таблице inet_device_tree нет записи с созданным устройством
А функция deviceList выдает что оно есть
Как же теперь создать устройство в дереве?
Как же теперь получить ли устройства из дерева?

Код:
ServerContext context = ServerContext.get();
               InetDeviceService deviceService = context.newService( InetDeviceService.class, INET_MODULE_ID ); //(Class, int moduleId)
               InetDeviceType deviceType = deviceService.deviceTypeGet( deviceTypeBillingCode );

               InvDevice device = new InvDevice();
               device.setIdentifier(deviceIdentifier);
               String timeStamp = MakeTimeStamp();
               device.setComment( "Автосоздание " + timeStamp);
               device.setDeviceTypeId(deviceTypeBillingCode);
               device.setHost("");
               device.setUsername("");
               device.setPassword("");   
               device.setSecret("");
               Preferences newProps = new  Preferences();
               device.setConfig( newProps.toString() );
               HashSet groupd = new HashSet( 1, 1 ); //сэт с id групп устройств
               groupd.add(new Integer(2));
               device.setDeviceGroupIds(groupd);
               device.setTitle( Device.generateTitle( device,  deviceType));
               device.setParentId(12);
               deviceId = deviceService.deviceUpdate( device );
               context.getConnectionSet().commit();
               deviceService.deviceReload();
               EventProcessor.getInstance().publish( new InetReloadEvent( INET_MODULE_ID, 0 )); //( moduleId, userId )

Автор:  Угрюмов Роман [ 11 авг 2014, 19:12 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

Что то после введения библиотеки, авторизация стала работать странно. На договоре я заблокировал сервис и ожидал что будет ошибка 10 "Сервис заблокирован." а у меня сейчас status not active accessCode = 0 ReturnCode = 0
Что самое удивительное, я ожидал что будет Reject, а сработал меъханизм RejectToAcept, поскольку выдался адрес из подсети, назначенной для RejectToAcept.
в конфиге стоит:
# Коды ошибок, при которых отвечать Access-Accept в состоянии disable (rejectToAccept)
radius.disable.accessCodes=1,20

Автор:  Amir [ 11 авг 2014, 19:35 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

device - это InvDevice - устройство из Библиотеки.
inetDevice - это InetDevice - устойство из дерева.

После того как разделили - метод deviceList - возвращает список устройств из библиотеки, а не из дерева.
Как получить устройства из дерева я писал выше, если нужно добавим метод inetDeviceList( type ).
Добавлять также как раньше, за исключением того, что в InetDevice некоторые поля нужно указывать, например, не в setIdentifier, а в setInvIdentifier.

Автор:  Amir [ 11 авг 2014, 19:51 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

Не уверен, что в этом дело. Это точно был rejectToAccept?
В дереве устройств откройте NAS с которого шел Access-Request, где конфигурация - нажмите Текущая и в поиске укажите radius.disable.accessCodes - там тоже 1,20?

Автор:  Угрюмов Роман [ 11 авг 2014, 20:44 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

Amir писал(а):
если нужно добавим метод inetDeviceList( type ).

Буду несказанно благодарен за этот метод!!!

Автор:  Amir [ 12 авг 2014, 02:43 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

Выкладывается.

Автор:  Угрюмов Роман [ 12 авг 2014, 13:47 ]
Заголовок сообщения:  Re: ru.bitel.bgbilling.modules.inet.api.common.bean.InvDevic

Amir писал(а):
Выкладывается.

Спасибо! Работает!

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/