Конфигурация системы




Полная конфигурация системы состоит из различных частей:

Название 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.ServerApplicationManager



System

Конфигурация системы представлена в файле 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>
   
Остановимся на некоторых моментах.

Что такое конфигуратор?
Это компонент, который конфигурирует определённую часть системы. На данный момент в основном используются XML конфигураторы. Они считывают данные из XML файлов, но возможна реализация для других форматов файлов, баз данных, хранилищь данных и т.д.

Что такое Service Locator?
Это компонент, который отвечает за поиск сервисов в системе по определённому имени. По умолчанию установлен org.plazmaforge.framework.platform.service.impl.spring.SpringServiceLocator

Что такое хранилище отчётов?
Это папка в файловой системе, где хранятся отчёты.



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 базы данных.
Основными полями таблицы являются:

Зачем нужна таблица SYSTEM_ENTITY ?
Она выполняет две важные функции: Подкючившись к базе данных системы и выполнив простой запрос
SELECT * FROM system_entity
мы получаем много полезной информации о сущностях системы. Это позволяет нам быстро строить SQL запросы.
В любом месте программы, зная лишь код сущности, мы можем быстро построить ассоциацию элементов данной сущности.
Например:

Класс Country.
Для данного класса существует несколько элементов (классов) другого типа, которые корреспондируют с этой сущностью.

Ассоциации упрощают процесс программирования, когда необходимо манипулировать классами корреспондирующими с одной и той же сущностью.
Детальнее см.
ассоциации.



Plazma ERM (ORM)

В системе используется технология Plazma ERM, позволяющая абстрагироваться от конкретной базы данных и упростить процесс разработки DAO (Data Access Object) слоя, путём использования маппинга между объектами базы данных и Java объектами.
Настройка Plazma ERM производится в файле erm.properties .


Маппинг объектов конфигурируется в *.erm.xml  файлах. 
В основном, в одном файле представлен один объект. Например:
<!-- 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 Framework



Forms

Для представления и редактирования сущностей испоьзуются формы. Для Desktop клиента формы выполнены в виде Java классов. Практически каждой сущности соответствет две базовых формы: форма список и форма для редактирования.

Например для сущности Country:

Для простых форм нет необходимости конфигурирования. Если при работе формы нужно вызвать какие нибудь нестандартные
действия или выполнять отчёты, то в этом случае нужно описать все эти действия и отчёты в конфигурационном файле form-config.xml (DTD)

Например:
<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).
См. также действия и отчёты.



Reports

Базовой репортинговой системой является JasperReports. Шаблоны (темплейты) отчётов размещаются в определённом хранилище (Report Storage). Хранилище отчётов можно сконфигурировать в файле system-config.xml (DTD)

Например:

   
<system-config>   
   <property name="report.storage.path">${root.dir}/reports</property>
</system-config>
Здесь указан путь относительно корневой папки системы. Можно также указать абсолютный путь - C:\MyReports
Для редактировани (дизайна) отчётов можно воспользоватся свободно распространяемой программой iReport. Для подключения отчётов к системе их необходимо сконфигурировать в файле report-config.xml (DTD)

Например:
<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)