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

5.2 Скрипт события
http://forum.bitel.ru/viewtopic.php?f=19&t=6896
Страница 1 из 1

Автор:  Феанор [ 25 июн 2012, 10:12 ]
Заголовок сообщения:  5.2 Скрипт события

Добрый день. Сегодня в канале джабера обсуждалась проблемка одна. В итоге-то все решилось, но мне кажется не самым лучшим способом. Хочется услышать комментарии разработчиков. Тем более самому интересно ввиду скорого перехода на 5.2

Код:
package contract.module.voiceip;

import ru.bitel.bgbilling.kernel.event.Event;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;

import ru.bitel.bgbilling.kernel.event.events.ContractParamChangedEvent;
import bitel.billing.server.contract.bean.*;

public class login
   extends EventScriptBase
{
   @Override
   public void onEvent( Event event1, Setup setup2, ConnectionSet connectionSet3 )
      throws Exception
   {
      int cid = event1.getContractId();
      int pid = event1.getParamId();

      print(cid);
      print(pid);
   }
}


так не работало, естественно, потому что getParamId() определен у ContractParamChangedEvent.
сделать вызов
Код:
public void onEvent( ContractParamChangedEvent event1, Setup setup2, ConnectionSet connectionSet3 )

тоже не получается, потому что компилятор ругается что мы не переопределили абстрактный метод.
в итоге пришлось сделать приведение типов
Код:
ContractParamChangedEvent event2=(ContractParamChangedEvent)event1

Но насколько я помню теорию - так делать не сильно хорошо :)

Или пофигу? Если нет, то как лучше сделать?

Автор:  stark [ 25 июн 2012, 10:46 ]
Заголовок сообщения:  Re: 5.2 Скрипт события

Код:

import ru.bitel.bgbilling.kernel.event.Event;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;

import ru.bitel.bgbilling.kernel.event.events.ContractParamChangedEvent;
import bitel.billing.server.contract.bean.*;

public class login
   extends EventScriptBase<ContractParamChangedEvent>
{
   @Override
   public void onEvent( ContractParamChangedEvent event1, Setup setup2, ConnectionSet connectionSet3 )
      throws Exception
   {
      int cid = event1.getContractId();
      int pid = event1.getParamId();

      print(cid);
      print(pid);
   }
}

Автор:  stark [ 25 июн 2012, 10:46 ]
Заголовок сообщения:  Re: 5.2 Скрипт события

и называть класс с маленькой буквы не принято в java . Это запутывает.

Автор:  dimOn [ 25 июн 2012, 11:04 ]
Заголовок сообщения:  Re: 5.2 Скрипт события

Приводить можно, а иногда и нужно. Но если есть возможность сразу класс типизировать, то так, конечно, будет правильнее и удобнее. Вот в биншеле, очевидно, выбора особо нет.

Автор:  Феанор [ 25 июн 2012, 11:23 ]
Заголовок сообщения:  Re: 5.2 Скрипт события

stark писал(а):
и называть класс с маленькой буквы не принято в java . Это запутывает.

Ну да, странно что у человека на это компилятор не ругался.

PS А если я захочу на два события один скрипт повесить? Экстендить то можно только 1 класс, это не интерфейс, которых несколько можно воплощать...

Автор:  dimOn [ 25 июн 2012, 11:39 ]
Заголовок сообщения:  Re: 5.2 Скрипт события

Компилятор и не должен ругаться.
Экстендить нужно один класс, он один и тот же. Как вы собираетесь на 2 события 1 скрипт вешать таким образом?

Автор:  Феанор [ 25 июн 2012, 11:45 ]
Заголовок сообщения:  Re: 5.2 Скрипт события

dimOn писал(а):
Компилятор и не должен ругаться.
Экстендить нужно один класс, он один и тот же. Как вы собираетесь на 2 события 1 скрипт вешать таким образом?

Я про типизацию
Код:
extends EventScriptBase<ContractParamChangedEvent>


Комплиятор ругается. Но вроде только когда внутри Login.java идет public class login { } =)


ps а если метод onEvent() перегрузить?
Должно же будет заработать?:) Или какие-то свои минусы будут?
Код:
@Override
   public void onEvent( Event event1, Setup setup2, ConnectionSet connectionSet3 )
      throws Exception
   {
    //do nothing;
   }


   public void onEvent( ContractParamChangedEvent event1, Setup setup2, ConnectionSet connectionSet3 )
      throws Exception
   {
      int cid = event1.getContractId();
      int pid = event1.getParamId();

      print(cid);
      print(pid);
   }

Автор:  stark [ 25 июн 2012, 13:22 ]
Заголовок сообщения:  Re: 5.2 Скрипт события

Феанор писал(а):

PS А если я захочу на два события один скрипт повесить? Экстендить то можно только 1 класс, это не интерфейс, которых несколько можно воплощать...


Тогда делаете метод с Event и в нем код. Если нужно, то преобразовании типов делайте. И если код выполнятся по разному должен , то проверка
Код:
if ( event instanceof  ContractParamChangedEvent )
{
}
else  if ( event instanceof  BillCreatedEvent )
{
}



Автор:  Феанор [ 25 июн 2012, 14:52 ]
Заголовок сообщения:  Re: 5.2 Скрипт события

stark писал(а):
Феанор писал(а):

PS А если я захочу на два события один скрипт повесить? Экстендить то можно только 1 класс, это не интерфейс, которых несколько можно воплощать...


Тогда делаете метод с Event и в нем код. Если нужно, то преобразовании типов делайте. И если код выполнятся по разному должен , то проверка
Код:
if ( event instanceof  ContractParamChangedEvent )
{
}
else  if ( event instanceof  BillCreatedEvent )
{
}




ну я так и предполагал вобщем то.. Спасибо )

Автор:  Andrew [ 26 июн 2012, 05:28 ]
Заголовок сообщения:  Re: 5.2 Скрипт события

Мб такое в wiki занести? Наверно не я один на такие грабли попаду...

Автор:  skyb [ 26 июн 2012, 07:31 ]
Заголовок сообщения:  Re: 5.2 Скрипт события

Andrew писал(а):
Мб такое в wiki занести? Наверно не я один на такие грабли попаду...

Так в чем проблема ;)

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