Полная конфигурация системы состоит из различных частей:
| Название | XML файл | Таблица | Описание |
| Application | application.xml | - | Свойства приложения |
| System | system-config.xml | - | Конфигурация системы |
| Data Source | application-context-ds.xml | - | Конфигурация Data Source |
| JDBC | jdbc.properties | - | Свойства JDBC подключения |
| RMI | application-context-rmi.xml (Сервер) rmi.properties (Клиент) |
- | Свойства RMI подключения |
| Entitites | - | system_entity | Конфигурация сущностей |
| Plazma ERM | erm.properties | - | Конфигурация Plazma ERM |
| Services | application-context.xml packages/<имя пакета>/service.xml packages/<имя пакета>/service-impl.xml |
- | Конфигурация Spring сервисов |
| Forms | form-config.xml | - | Конфигурация форм |
| Reports | report-config.xml | - | Конфигурация отчётов |
| Acceptors | acceptor-config.xml | - | Конфигурация аксепторов для отчётов |
| Actions | action-config.xml | - | Конфигурация действий |
| MenuBar | menubar-config.xml | - | Конфигурация меню |
| ToolBar | toolbar-config.xml | - | Конфигурация панели инструметов |
| Interface | interface-config.xml | - | Конфигурация интерфейса пользователя |
| Associations | association-config.xml | - | Конфигурация ассоциаций |
| Packages | package-config.xml | - | Конфигурация пакетов |
Application
Свойста приложения представлены в файле application.xml
Например:
<properties>
<locale>ru_RU</locale> <!-- локаль -->
<application-name>Plazma ERP+CRM</application-name> <!-- имя приложнеия -->
<application-manager>org.plazmaforge.bsolution.base.client.SWTClientApplicationManager</application-manager> <!-- менеджер приложения -->
<is-external-config>true</is-external-config> <!-- true - если используются внешние файлы конфигурации -->
</properties>
В данном случае сконфигурировано клиент приложение (SWT), так как используется org.plazmaforge.bsolution.base.client.SWTClientApplicationManager.
Менеджер отвечает за инициализацию приложения во время загрузки.
Для сервера будет использован другой менеджер - org.plazmaforge.bsolution.base.server.ServerApplicationManagerSystem
Конфигурация системы представлена в файле system-config.xml (DTD)
Например:
<system-config>
<!--
Конфигурирование модульных и графических компонент
-->
<configurer name="PackageConfigurer" type="XMLPackageConfigurer"></configurer> <!-- конфигуратор пакетов -->
<configurer name="ActionConfigurer" type="XMLActionConfigurer"></configurer> <!-- конфигуратор действий в системе -->
<configurer name="InterfaceConfigurer" type="XMLInterfaceConfigurer"></configurer> <!-- конфигуратор интерфейсов пользователя -->
<configurer name="MenuBarConfigurer" type="XMLMenuBarConfigurer"></configurer> <!-- конфигуратор меню -->
<configurer name="ToolBarConfigurer" type="XMLToolBarConfigurer"></configurer> <!-- конфигуратор панели инструментов -->
<configurer name="FormConfigurer" type="XMLFormConfigurer"></configurer> <!-- конфигуратор форм -->
<configurer name="AssociationConfigurer" type="XMLAssociationConfigurer"></configurer> <!-- конфигуратор ассоциаций -->
<!--
Конфигурирование отчётов
-->
<configurer name="ReportConfigurer" type="XMLReportConfigurer"></configurer> <!-- конфигуратор отчётов -->
<configurer name="AcceptorConfigurer" type="XMLAcceptorConfigurer"></configurer> <!-- конфигуратор акцепторов для отчётов -->
<!--
Свойства системы
-->
<system-properties>
<property name="javax.xml.transform.TransformerFactory">org.apache.xalan.processor.TransformerFactoryImpl</property>
<property name="report.engine.class">org.plazmaforge.framework.report.engine.jasperreports.JasperReportsEngine</property> <!-- подключение репортинговой системы -->
</system-properties>
<!--
Свойства платформы
-->
<platform-properties>
<property name="config.loader.class">org.plazmaforge.bsolution.base.EnterpriseConfigLoader</property>
<property name="period.creator.class">org.plazmaforge.bsolution.base.EnterprisePeriodCreator</property>
<!--
Конфигурирование хранилища отчётов
-->
<property name="report.storage.path">${root.dir}/reports</property>
<!--
Конфигурирование Service Locator'а
-->
<!-- RMIServiceLocator (Lite Server) -->
<!--
<property name="service.locator.class">org.plazmaforge.framework.platform.service.impl.rmi.RMIServiceLocator</property>
-->
</platform-properties>
<property-stores>
<!-- Stores example -->
<!--
<store name="storename">
<property name="prop1">value1</property>
<property name="prop2">value2</property>
</store>
-->
</property-stores>
</system-config>
Остановимся на некоторых моментах.Data Source
Настройка источника данных (Data Source) производится в файле application-context-ds.xml (DTD).
JDBC
Настройка JDBC подключения к базе данных
Например:
# Установка свойств подключения к базе данных Firebird
jdbc.driverClassName=org.firebirdsql.jdbc.FBDriver
jdbc.url=jdbc:firebirdsql:localhost/3050:C:\\DATA\\plazma.gdb
jdbc.username=sysdba
jdbc.password=masterkey
RMI
Настройка подключения к серверу приложения по RMI протоколу.
Например:
rmi.host = localhost
rmi.port = 2005
Entitites
Метаинформация о сущностях (персистенс объектах) в системе хранится в таблеце SYSTEM_ENTITY базы данных.
Основными полями таблицы являются:
SELECT * FROM system_entity
мы получаем много полезной информации о сущностях системы. Это позволяет нам быстро строить SQL запросы.Класс Country.
Для данного класса существует несколько элементов (классов) другого типа, которые корреспондируют с этой сущностью.
Plazma ERM (ORM)
В системе используется технология Plazma ERM,
позволяющая абстрагироваться от конкретной базы данных и упростить процесс разработки
DAO (Data Access Object) слоя, путём использования маппинга между объектами базы данных и Java объектами.
Настройка Plazma ERM производится в файле erm.properties .
<!-- org/plazmaforge/bsolution/base/server/entities/Country.erm.xml -->
<entity-mapping>
<entity class="org.plazmaforge.bsolution.base.common.beans.Country" table="COUNTRY">
<key name="id" column="ID" type="Integer" generator-type="increment"/>
<attribute name="code" column="COUNTRY_CODE" type="String" />
<attribute name="name" column="NAME" type="String" reqired="true" />
</entity>
</entity-mapping>
Здесь устанавливается взаимоотношение между классом Country и таблицей COUNTRY. Атрибуты класса id, code, name сопоставляются
c полям таблицы ID, CODE, NAME соответственно. Это освобождает разработчика от написания кучи запросов (INSERT, UPDATE, DELETE, SELECT).
Тем не менее, данная технология позволяет выполнять любые SQL запросы, если в этом есть необходимость.Services
Сервисы являются важной частью системы. Они манипулируют сущностями (персистенс объектами). Сервисы отвечают за загрузку, добавление, изменение, удаление
данных. Также сервисы позволяют выполнять другие действия в системе. Практичски каждой сущности соответсвует свой сервис.
Каждому сервису - своя реализация.
Например:
Country -> CountyService -> CountryServiceImpl
Общие для всех пакетов сервисы конфигурируются в файле application-context.xml (DTD)
Для каждого пакета сервисы конфигурируются отдельно в в файлах packages/<имя пакета>/service-impl.xml, packages/<имя пакета>/service.xml (DTD)
Например:
<!--
конфигурирование реализации (имплементации) Country сервиса
packages/base/service-impl.xml
-->
<bean id="CountryServiceImpl" class="org.plazmaforge.bsolution.base.server.services.CountryServiceImpl" lazy-init="true">
<property name="sessionFactory"><ref local="sessionFactory"/></property> <!-- установка фабрики сессии (взаимодействует с dataSource)-->
</bean>
....
<!--
конфигурирование Country сервиса
packages/base/service.xml
-->
<bean id="CountryService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property> <!-- установка менеджера транзакций -->
<property name="target"><ref bean="CountryServiceImpl"/></property> <!-- установка реализации сервиса -->
<property name="transactionAttributes"> <!-- установка атрибутов транзакции -->
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
<property name="preInterceptors"> <!-- установка интерцептора системы безопасности-->
<list>
<ref local="securityInterceptor"/>
</list>
</property>
</bean>
Более детальная информации о конфигурировании сервисов, транзакций и т.д представлена на сайте Spring FrameworkForms
Для представления и редактирования сущностей испоьзуются формы. Для Desktop клиента формы выполнены в виде Java классов.
Практически каждой сущности соответствет две базовых формы:
форма список и форма для редактирования.
Например для сущности Country:
<form-config>
<form code="PersonEditForm">
<actions>
<action id="PersonEducationListForm"/>
<action id="PersonFamilyListForm"/>
<action id="PersonJobListForm"/>
<action id="PersonLanguageListForm"/>
</actions>
</form>
<form id="EmployeeListForm">
<reports>
<report id="PersonCardReport"/>
</reports>
</form>
<form-config>
Здесь к форме PersonEditForm подключаються действия, определённые в файле action-config.xml (DTD).
Тоесть при работе с формой PersonEditForm, мы можем переключиться на другие формы
и просмотреть информацию по текущей выбраной позиции. К форме EmployeeListForm подключаеться отчёт PersonCardReport,
, определённый в файле report-config.xml (DTD).
Базовой репортинговой системой является JasperReports.
Шаблоны (темплейты) отчётов размещаются в определённом хранилище (Report Storage).
Хранилище отчётов можно сконфигурировать в файле system-config.xml (DTD)
Например:
<system-config>
<property name="report.storage.path">${root.dir}/reports</property>
</system-config>
Здесь указан путь относительно корневой папки системы. Можно также указать абсолютный путь - C:\MyReports<report id="SaleOrder" single="true" folder="goods" file="SaleOrder"/>Здесь подключается отчёт, полный путь которого будет: <ReportStorage>/goods/SaleOrder.jasper Расширение .jasper подключаеться автоматически, так как по умолчанию установлена репортинговая система JasperReports. Что бы получить параметры для отчёта можно воспользоватся акцепторами.
<report id="GoodsSale" folder="goods" file="GoodsSale">
<acceptor id="OrganizationPeriodDialogAcceptor"/>
</report>
В данном случае акцептором являеться диалоговое окно, запрашиваемое начальную и конечную дату периода. Возможны реализации других типов акцепторов,
которые не взаимодействуют с пользователем а самостоятельно опрашивают систему на наличие необходимых параметров.Acceptors
Акцепторы - это компоненты, которые отвечают за получение параметров для отчётов.
Акцепторы конфигурируются в файле acceptor-config.xml (DTD)
Например:
<acceptor id="OrganizationAcceptor" class="org.plazmaforge.bsolution.base.common.acceptors.OrganizationAcceptor"/>
<acceptor id="OrganizationPeriodAcceptor" class="org.plazmaforge.bsolution.base.common.acceptors.OrganizationPeriodAcceptor"/>
<acceptor id="OrganizationPeriodDialogAcceptor" class="org.plazmaforge.bsolution.base.client.swt.acceptors.OrganizationPeriodDialogAcceptor"/>
<acceptor id="OrganizationYearDialogAcceptor" class="org.plazmaforge.bsolution.base.client.swt.acceptors.OrganizationYearDialogAcceptor"/>
Первые два акцептора запрашивают в системе параметры без предоставления диалога для пользователя, последующие акцепторы - предоставляют диалог для ввода параметров.Actions
Действия, выполняемые на стороне клиента конфигурируются в файле action-config.xml (DTD).
Здесь можно указать как Java класс, так и команду действия.
Например:
<action id="AboutAction" class="org.plazmaforge.bsolution.base.client.swt.actions.AboutAction"/> <action id="CountryListForm" command="OPEN_LIST_FORM" parameters="base/CountryListForm"/> <action id="PriceListReport" command="PREVIEW_REPORT" parameters="PriceListReport"/>Здесь для действия AboutAction используется Java класс. Для действия CountryListForm - команда OPEN_LIST_FORM с параметром имя формы. Для действия PriceListReport - команда PREVIEW_REPORT с параметром имя отчёта. Во втором действии происходит вызов формы-списка, в третьем - запускается отчёт.
MenuBar
Системное меню клиента конфигурируются в файле menubar-config.xml (DTD)
<menubar-config>
<menubar>
....
<!-- Documents menu -->
<menu code="Documents" text="">
<menuitem action="NewDocument"/>
<menuitem action="ChooseDocument"/>
<menuitem text="-"/>
<menuitem action="DocumentListForm"/>
<menuitem text="-"/>
<menuitem action="ContractListForm"/>
<menuitem text="-"/>
<menu code="Documents.Sale" text="">
<menuitem action="SalePlanListForm"/>
<menuitem text="-"/>
<menuitem action="SaleOrderListForm"/>
....
</menu>
</menu>
</menubar>
</menubar-config>
Атрибут action тега menuitem указывает на названия действия, определённого в файле action-config.xml.ToolBar
Панель инструментов клиента конфигурируются в файле toolbar-config.xml (DTD)
Например:
<toolbar-config>
<toolbar>
<toolitem action="PartnerListForm"/>
<toolitem action="EmployeeListForm"/>
<toolitem action="BankListForm"/>
<toolitem action="-"/>
<toolitem action="GoodsListForm"/>
<toolitem action="-"/>
<toolitem action="DocumentListForm"/>
<toolitem action="ContractListForm"/>
<toolitem action="-"/>
<toolitem action="ProjectListForm"/>
<toolitem action="TaskListForm"/>
<toolitem action="-"/>
<toolitem action="ReportListForm"/>
<toolbar>
<toolbar-config>
Атрибут action тега toolitem указывает на названия действия, определённого в файле action-config.xml.Interface
Панель инструментов клиента конфигурируются в файле interface-config.xml (DTD)
Например:
<interface-config>
<interface id="Sale"/>
<interface id="Purchase"/>
<interface id="Inventory"/>
<interface id="Accounting"/>
<interface id="HR"/>
<interface id="Payroll"/>
<interface id="Project" is-enable="false"/>
<interface id="Admin"/>
<interface-config>
Associations
Ассоцация - это объединение классов разных типов по одному общему признаку. В основном таковым признаком является сущность (персистенс объект), которая находится в центре ассоциации. Каждый представитель ассоциации имеет свой тип. Например: сервис, форма-список, форма-редактирование и т.д. Некоторые ассоциации создаются автоматически, если соблюдены определённые правила при названии классов и пакетов в проекте. Можно также сконфигурировать ассоциации в файле association-config.xml (DTD)
Packages
Пакеты (Java package) можно сконфигурировать в файле package-config.xml (DTD)