Показаны сообщения с ярлыком java. Показать все сообщения
Показаны сообщения с ярлыком java. Показать все сообщения

пятница, 3 января 2014 г.

Jasper Reports и JRDataSource из строки JSON

Иногда поля основного источника данных приходят из разных мест() и в разных форматах данных. Я хотел бы рассмотреть один частный случай, т.е. когда одно из полей(field) основного источника данных является строкой JSON и его нужно как-то обработать или же обработать и использовать его в качестве исходных данных нового источника данных для таблицы или вложенного отчета.
Итак, допустим, что некоторое поле $F{field} является строкой, содержащей JSON (Array), в таком случае, можно сделать интересный финт ушами и создать из этой строки полноценный DataSource. 
new net.sf.jasperreports.engine.data.JRMapCollectionDataSource(
    (java.util.Collection<java.util.Map<String,?>>) new org.json.simple.parser.JSONParser().parse($F{details})
)
Вот такой вот простой трюк позволяет использовать один из типов источников данных Jasper Reports и сразу преобразовать JSON в объектную модель Java. Учтите, это будет работать только в том случае, если в classpath приложения, которое будет рендерить, отчет будет библиотека Simple JSON.
Дело в том, что JRMapCollectionDataSource принимает коллекцию карт (ассоциативных массивов, мап) в качестве исходных для источника данных каждая следующая запись - следующая мапа в коллекции, каждой поле датасэта - это значение, взятое по одноименному ключу из мапы. В случае с JSON и библиотекой Simple JSON мы парсим массив объектов и получаем на выходе объект класса JSONArray, который наследует ArrayList (соответственно, реализует Collection). Далее, JSONArray состоит из объектов JSONObject, которые реализуют java.util.Map. В итоге, мы получаем пример совместимости здравого смысла абсолютно независимых разработчиков в виде совместимого и продуманного интерфейса (что в случае Jasper Reports - феномен).

воскресенье, 2 сентября 2012 г.

JAAS в Glassfish 3

Не так давно задался целью написать простой JAAS-модуль для сервера GlassFish 3, поскольку EJB Security доступна только в случае использования одного из стандартных модулей, либо своего собственного. Самым доступным и полным руководством для меня оказалась статья "Применение JAAS в Web-приложениях на glassfish v2" пользователя cy6erGn0m, но не обошлось и без неприятностей, т.к. оказалось, что в третьей версии сервера кое-что поменяли и эти ваши интернеты почти ничего об этом не говорят. В общем, я решил написать еще одно краткое руководство, в дополнение к существующему.