Style Report Data Source Edition Lite
Style Report DataSource Edition - является расширением Style Report Lite 3.0 в который добавлены полнофункциональные средства для работы с различными источниками данных. Style Report Lite - представляет собой набор API с помощь которого можно добавлять функции просмотра и печати в свои приложения. Средства построения запросов и подключения к источникам данных в Style Report DataSource Edition имеются в дизайнере отчётов. Они также доступны и через вызовы API. Поддерживаются следующие типы источников данных:
XML
Реляционные БД (JDBC)
CORBA
Enterprise JavaBeans
Текст
Возможности:
SQL-подобный синтаксис запросов
Секций для расположения и фильтрации данных
Поддерживаются подзапросы
Имеется API интерфейс к управлению запросами
Поддерживается передача параметров в запросы
Печать из аплетов и в PDF
Цены | |
Версия | Цена |
Style Report/Lite | Free |
Style Report/Pro | $995 |
Style Report/Source | $3995 |
Style Report/Enterprise (Include one development server runtime license) | $2980 |
Runtime | Бесплатный для продуктов, не являющихся средствами разработки. |
URL: http://www.inetsoftcorp.com/
Примечание:
К сожалению, пришлось иметь дело только с бета-версией данного продукта, которую не удалось заставить работать. Однако бета-версия продукта Style Report Lite 3.0 заслуживает самого пристального внимания. Из всех протестированных средств построения отчётов, её в большей степени удалось русифицировать. Управление отчётом на уровне API позволяет добиться большоё гибкости и комбинировать самые разнообразные данные приложения. Поддерживаются шрифты, изображения, богатый набор стилей таблиц. Однако расплатой за это является необходимость программирования отчётов. Дизайнер отчётов больше ориентирован на построение разметки страницы, чем на описания секций отчета, что затрудняет построение отчетов с группировками. Такая обработка выносится на уровень программы, и элементы отчёта предполагается создавать из программы без помощи дизайнера. Версии Style Report DataSource Edition является гораздо более удобным средством для построения отчётов по базам данных, однако посмотреть её функциональность не удалось. В целом этот продукт является серьёзным претендентом на встраивание в приложения. Хотя требует достаточно высокой квалификации для создания отчета. К недостаткам, можно также отнести невозможность запустить выполнения отчета во фрейме приложения. Если нужно составить несколько встроенных в приложение отчётов StyleReport прекрасно для этого подойдёт.
Средства для построения отчётов, не включенные в тестирование
EspressChart.
EspressChartTM is a set of tools that enables you to easily include dynamic charts in your Java applications and on your Web pages. You can display the chart as a Java applet or PNG/GIF/JPEG image in your browser. (Note: EspressChart can be used in a servlet to generate PNG/GIF/JPEG images on the server dynamically.) It is written in 100% pure Java so it is completely platform independent. EspressChart supports JDBC/ODBC for retrieving and plotting data from any database.
URL: http://www.quadbase.com/espresschart/index.html
NetCharts.
NetCharts is a suite of Java applets that allows HTML authors, web developers, and Java programmers to quickly and easily create on-line charts from virtually any data source, with minimal coding. NetCharts supports any Java 1.0.x or 1.1.x enabled platform, including PCs, UNIX and network computers. All applets can be viewed through any Java compatible Web browser and support the use of the JDBC interface to retrieve parameter definitions or data values from one or more database servers or data sources, including Oracle, Sybase, Informix, DB2, Microsoft SQL Server, dBase, Access and Excel.
URL: http://www.cartworks.com
Java: Конфигурация программ.
Содержание:
Зачем нужно конфигурирование?
Что именно стоит настраивать.
Способы хранения настроек.
Ini-файлы.
Файлы Properties.
XML-файлы.
Сериализация.
Базы данных.
Скрипты.
Пример программы с конфигурацией в XML.
Профессиональным программистам этот вопрос покажется странным. У начинающих же часто наблюдается явное непонимание важности этой возможности. При этом получается программа, похожая на каменную глыбу с высечеными на ней надписями - если захочется изменить надпись, то придётся делать новый камень.
Есть и другая крайность - когда практически всё выносится в настройки. Такие программы напоминают разлитую жидкость, а чтобы заставить её работать надо прочитать талмуд описания и настроить несколько сотен параметров, к тому же часто взаимосвязанных противоестественным образом.
Как всегда нужно найти золотую середину - с одной стороны надо постараться удовлетворить различные прихоти пользователей, с другой стороны нужно сделать так, чтобы большинству пользователей ничего настраивать не пришлось.
Вот типичные примеры данных, которые часто стоит вынести в настройки:
Всевозможные каталоги. Например - пути до файлов данных, каталоги импорта/экспорта.
Сетевые настройки. Имена серверов, IP-адреса, порты, имена и пароли для автоматического доступа.
Настройки баз данных. Имена JDBC-драйверов, URL базы данных, SQL-запросы, зависимые от используемой БД.
Настройки внешнего вида. Настройки Swing-овского Look & Feel-а, используемые шрифты, размеры, цвета, настройки горячих клавиш.
Прочее... Любые другие вещи, которые могут менятся от пользователя к пользователю.
Например, довольно часто встречаемая ситуация - настройка соединения с БД. Начинающие программисты часто пишут нечто подобное:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:MyDatabase",user,password);
Таким образом программа привязывается к конкретному JDBC драйверу. Использовать другой драйвер, например заменить мост на RMI-прокси или, в случае Oracle, OCI на Thin без перекомпиляции уже нельзя.
В объектном программировании всё представляется в виде объектов. Настройки лучше всего при этом рассматривать как свойства определённых объектов, которые хранятся в файлах конфигураций. То, каким образом эти настройки считываются и записываются тесно взаимосвязано с форматом файлов и выбраной стратегией администрирования. Рассмотрим идеальный вариант:
Настраиваемый объект не должен содержать знаний о формате файлов и способе чтения/записи. Это позволило бы, в случае необходимости, заменить один способ другим.
Большинство настроек должны выполняться при помощи программы (подпункт меню или отдельная программа настройки). Это сильно облегчает жизнь человека, который занимается администрированием. У большинства "юниксоидов" это может вызвать непонимание :-), но редактированием текстовых файлов в современном мире во многих случаях не обойтись.
Должно быть установлено разумное умолчание для отсутствующих параметров. Другими словами - необходимо, чтобы большинству пользователей для запуска программы нужно было бы сделать минимум настроек. Как правило это оставляет благоприятное первое впечатление о программе, а часто именно оно - самое важное.
К сожалению этот идеальный вариант довольно трудно сделать на практике. Первое требование предполагает разработку универсального механизма сохранения объектов. Такие системы уже есть готовые, но часто они не подходят по тем или иным параметрам. Разработать же самому такую систему - далеко не каждому под силу.
Второе требование подразумевает, что для каждого объекта пишется своя панель (или диалог) для редактирования настроек. В случае большого количества объектов стоит попробовать использовать универсальные механизмы. Один из вариантов - использование стандарта JavaBeans. Этот стандарт разрабатывался для визуальных систем программирования, но, из-за сходства решаемых задач, также хорошо подходит для универсального конфигурирования. Но это тоже не самая простая задача, поэтому часто разумно предусмотреть возможность альтернативного варианта конфигурирования для пожарных случаев - например, при помощи обычных текстовых редакторов в случае использования текстовых форматов файлов.
Разумное же умолчание для параметров часто просто невозможно представить. Например, что поставить в качестве имени SMTP-сервера? В случае Unix-систем можно попробовать поставить localhost, но для Windows-мира это редко кому подойдёт.
Рассмотрим наиболее распространённые варианты:
Ini-файлы.
Ini-файлы - это был самый распространённый вариант в эпоху Windows 3.x. Сейчас в виндовых программах он стал вытесняться хранением настроек в реестре. Тем не менее ini - это один из простейших вариантов хранения настроек. К сожалению довольно часто эта простота заставляет прибегать к различно рода ухищрениям. Пример типичного ini-файла:
[Communication]
InputDir=INPUT
OutputDir=OUTPUT
ArchDir=ARHIV
TransferPath = a:\cour
[Warning]
NoReceived=No
[Addons]
Numb = 3
MenuName1 = ~N~orton
ProgName1 = mousesav c:\command.com /c nc
MenuName2 = Win - ~Б~локнот
ProgName2 = notepad
MenuName3 = Импорт из формата АБ "Инкомбанк"
ProgName3 = incom.bat
В Java нет стандартного класса для чтения ini-файлов, но это не проблема. Т.к. формат очень прост, его легко сделать самому:
import java.io.*;
import java.util.*;
public class INIFile
{
Properties iniProperty = new Properties();
public INIFile(File f) { this( f.getPath() ); }
public INIFile(String fname) throws IOException { loadFile( fname ); }
private void loadFile( String fname ) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fname)));
try
{
String section = "";
String line;
while( (line = br.readLine())!=null )
{
if( line.startsWith(";") ) continue;
if( line.startsWith("[") )
{
section = line.substring(1,line.lastIndexOf("]")).trim();
continue;
}
addProperty(section,line);
}
}
finally { br.close(); }
}
private void addProperty(String section,String line)
{
int equalIndex = line.indexOf("=");
if( equalIndex > 0 )
{
String name = section+'.'+line.substring(0,equalIndex).trim();