metaclass (metaclass) wrote,
metaclass
metaclass

Special Olympics - артурег

artureg
скриншот без js
скриншот с js
скриншот отчета
работает!

Значит, что по поводу решения на java:
1) Вчера коллективом из N человек разбирались "как поставить нужную жабу на убунту 10.04"
вот результат: https://operden.googlecode.com/svn/trunk/howtoinstall.txt
2) Первая же команда не работает - нужно сначала выполнить sudo apt-get install python-software-properties . Если бы не вчерашний деплоймент айседовской опердени и наличие в нем nodejs требующего этой же команды для инсталляции, или же гугла - в жизнь бы не нашли, т.к. add-apt-repository и python-software-properties в здравом уме между собой увязать сложно.
3) В итоге, деплоймент (по уже проверенной инструкции, которую вчера составлял коллектив из нескольких гуру) занял гораздо меньше времени, заодно без отсылок на сторонние сайты. Впрочем, инструкция все равно рассчитана на гуру, не подробная. Отзыв kometa_zxc которая все это деплоит:
"у артурега ИМХО инструкция проще, но пары команд не хватает
и телодвижений меньше"

4) факап номер раз:

>ps aux | grep java
root      4038  0.4 16.7 293380 85276 pts/0    Sl+  10:27   0:09 /usr/lib/jvm/java-6-sun/bin/java -classpath /usr/share/maven2/boot/classworlds.jar -Dclassworld
s.conf=/usr/share/maven2/bin/m2.conf -Dmaven.home=/usr/share/maven2 org.codehaus.classworlds.Launcher "jetty:run"


web-приложение запущено от root. Впрочем, для одноразового демо-приложения может и пойдет, но паранойя визжит.

Далее: что у артурега, что у айседа корни веб-приложений отдают всякую тяжелую неведомую ебаную хуйню, кто со стек-трейсами, кто еще с чем. Ну стек-трейсы отключаются само собой, переводом в продакшен режим(приложения оба запущены в development моде). Но в корень я бы все таки положил index.html со ссылкой на приложение, потому что пользователи(в т.ч. и я) инструкций где указано открыть конкретный url - не читают.

5) ошибки xml конфига с отчетами: у айседа показывает что "отчетов не найдено" с выводом в лог, у артурега - "ParseError at [row,col]:[46,5] Message: Element type "re" must be followed by either attribute specifications, ">" or "/>"."

6) формально валидный xml, но без атрибута name:

Unable to satisfy @org.simpleframework.xml.Attribute(name=, empty=, required=true) on field 'name' private java.lang.String by.artureg.so.conf.Report.name for class by.artureg.so.conf.Report at line 45

у айседа то же самое: молча пропускает, в логах нет информации никакой, отчета не видно. пропустил - в логе сообщение "Report must have name"

7) Формально валидный но не до конца заполненный xml, окно с фразой "null" и трейс в логе:

    <report name="test1">
        <sql>select * from test where id<:id</SQL>
        <Parameters>
                <parameter name="id" type="integer" />
        </Parameters>
    </report>


2012-02-07 11:55:15,075 ERROR org.apache.struts2.json.rpc.RPCError.error:38 -
java.lang.NullPointerException
        at by.artureg.so.conf.Report.getFieldByName(Report.java:78)
        at by.artureg.so.dl.SoDao$1.mapRow(SoDao.java:80)
        at by.artureg.so.dl.SoDao$1.mapRow(SoDao.java:71)
        at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:92)
        at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:1)
        at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:649)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:587)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:637)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:662)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:702)
        at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.query(NamedParameterJdbcTemplate.java:166)
        at by.artureg.so.dl.SoDao.request(SoDao.java:68)
        at by.artureg.so.dl.SoService.runReport(SoService.java:22)
        at by.artureg.so.smd.SmdService.runReport(SmdService.java:28)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.struts2.json.JSONInterceptor.invoke(JSONInterceptor.java:246)
        at org.apache.struts2.json.JSONInterceptor.intercept(JSONInterceptor.java:133)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:510)
        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
        at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
        at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
        at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:324)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
        at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
        at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
        at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)



8) ошибочно введенный параметр фильтра: строка в числе:
скриншот
валится в parseInt на стороне сервера.
Если ввести 1234.1 в строку для integer, то выводит сообщение "For input string: "1234.1""

9) Дефолтные значения даты-времени: скриншот. Это типа "начало и конец предыдущего месяца".
Первая ошибка здесь моя: надо было поставить формат времени HH:mm:ss.
Но даже после исправления все равно получается 01:00:00 и 00:59:59.

10) Еще баг даты времени: даже если исправить предыдущий и сделать запрос "включительно", т.е. <=, то параметр 23:59:59 не покажет событие, которое произойдет в 23:59:59.5 т.е. за полсекунды до конца месяца.

11) Айседное приложение из wget работает от входа. Артуреговое я пока не запустил, т.к. он использует для передачи параметров POST и в нем json с параметрами.
wget --post-file=query.json "--header=Content-Type: application/json-rpc; charset=UTF-8" http://localhost:9090/so/smd/so.action

содержимое query.json:
"{"params":["datetime1",[{"name":"datetimevalb","value":1328047200000},{"name":"datetimevale","value":1330552799999}]],"method":"runReport","id":4}"

12) Если попросить у айседного сервиса json/xml/чорта лысого с помощью "header=Accept: text/xml" как завещает RESTful - оно или отдаст результат или скажет что не умеет такого.
У артурега - отдаст json в любом случае. Но! Если спросить ошибочно - ответит вместо json - html с ошибкой и стектрейсом.
Если же спросить "по другому" ошибочно: т.е. json валидный, а смысл его неправильный - то отдаст json с ошибкой). При этом все равно можно добится разного поведения (правильный ответ, ошибка в html, ошибка в json)) манипулируя параметрами.

13) неправильно введенный параметр даты времени вызывает невидимое исключение "undefined" в JavaScript, запрос не уходит, отчет остается открытым старый и единственное, где это видно - восклицательный знак возле поля ввода.

14) обновление по пункту 8:
оставливаем jetty
svn up
mvn install
mvn jetty:run

выводится сообщение "Invalid number format". Если глянуть на запрос в Firebug - внутри json-ответа еще и стек трейс от сервера есть.
Tags: special-enterprise-olympics
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 61 comments