Commit 3bfd863d authored by doc@bgerp.org's avatar doc@bgerp.org

p12102 Update developer DB on start, connection properties in code.

parent e10a7ddf
......@@ -4,11 +4,13 @@ server.port.http=9089
server.port.admin=2010
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/bgerp?jdbcCompliantTruncation=false&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
db.url=jdbc:mysql://localhost:3306/bgerp
db.user=
db.pswd=
scheduler.start=1
pooling.enable=1
runOnStart+=,ru.bgcrm.util.distr.DevDbUpdater
title=TEST
A: Применение обновлений БД при запуске разработчиком, https://bgerp.ru/doc/3.0/manual/project.html#ide-run
C: Опции подключения к БД перенесены в Java код.
......@@ -150,7 +150,7 @@ public class Server extends Tomcat {
log.info("Compile dyn classes result:");
log.info(result.getLogString());
for (String className : Utils.toList(setup.get("runOnStart"))) {
for (String className : Utils.toSet(setup.get("runOnStart"))) {
log.info("Run class on start: " + className);
try {
......
......@@ -227,7 +227,7 @@ public abstract class ParameterMap extends AbstractMap<String, String> {
String[] pref = patternDot.split(suffix, 2);
try {
new Integer(pref[0]);
Integer.parseInt(pref[0]);
} catch (Exception ex) {
continue;
}
......@@ -299,6 +299,11 @@ public abstract class ParameterMap extends AbstractMap<String, String> {
return result;
}
/**
* Use {@link #subKeyed(String...)}
* @param prefix
* @return
*/
@Deprecated
public Map<String, Map<String, String>> parseObjectsNoOrder(String prefix) {
Map<String, Map<String, String>> result = new HashMap<String, Map<String, String>>();
......
package ru.bgcrm.util.distr;
public class Const
{
public static final String VERSION_INFO_PACKAGE = "ru/bgcrm/version/";
public static final String LIB_APP_DIR = "lib/app";
public class Const {
public static final String VERSION_INFO_PACKAGE = "ru/bgcrm/version/";
public static final String LIB_APP_DIR = "lib/app";
}
package ru.bgcrm.util.distr;
/**
* Запускается при старте сервера для корректировки структуры БД.
*/
public class DbCorrector
{
public DbCorrector()
{
//d
}
}
package ru.bgcrm.util.distr;
import java.io.File;
import java.io.FileInputStream;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.util.Arrays;
import org.apache.commons.io.IOUtils;
import ru.bgcrm.util.Setup;
import ru.bgcrm.util.distr.call.ExecuteSQL;
import ru.bgerp.util.Log;
/**
* Updates DB structure for running in IDE.
*/
public class DevDbUpdater implements Runnable {
private static final Log log = Log.getLog();
@Override
public void run() {
log.info("Running developer's DB update");
ExecuteSQL sqlCall = new ExecuteSQL();
try (Connection con = Setup.getSetup().getDBConnectionFromPool()) {
File[] files = new File("build/update").listFiles(f -> f.getName().endsWith(".sql"));
Arrays.sort(files, (f1, f2) -> f1.getName().length() - f2.getName().length());
for (File file : files) {
log.info("Applying: %s", file.getName());
sqlCall.call(con, IOUtils.toString(new FileInputStream(file), StandardCharsets.UTF_8));
}
} catch (Exception e) {
log.error(e);
}
}
}
......@@ -145,8 +145,10 @@ public class ExecuteSQL implements InstallationCall {
Set<String> result = new HashSet<String>();
if (!SQLUtils.tableExists(con, SQL_PATCHES_HISTORY)) {
String sql = "CREATE TABLE " + SQL_PATCHES_HISTORY + "( " + " `mid` varchar(20) NOT NULL, "
+ " `versions` text, " + " PRIMARY KEY (`mid`) )";
String sql = "CREATE TABLE " + SQL_PATCHES_HISTORY + "( "
+ " `mid` varchar(20) NOT NULL, "
+ " `versions` text, " +
" PRIMARY KEY (`mid`))";
con.createStatement().executeUpdate(sql);
return result;
......
This diff is collapsed.
......@@ -119,6 +119,7 @@ systemctl enable bgerp
----
Для автозапуска приложения при загрузке системы.
[[update]]
== Обновление
IMPORTANT: Изучите link:https://bgerp.ru#download[лог обновлений], там могут содержаться важные сведения либо инструкции.
......
......@@ -96,7 +96,6 @@ mail.smtp.pswd=
# отладка почтового обмена SMTP
#mail.debug=1
#
#
# <<message.adoc#process, теги>> сообщений [[config-message-tag]]
tag.1.title=Реквизиты
tag.1.color=red
......@@ -105,13 +104,13 @@ tag.2.color=green
tag.3.title=TODO
tag.3.color=magenta
#
# <<extension.adoc#dyn, динамический код>> и расширение функциональности [[config-dyn]]
dynamic.src.dir=dyn
dynamic.src.encoding=UTF-8
# максимальное время выполнения обработчика события в мс. до принудительного прерывания
event.processTimeout=1000
# перечень через запятую динамических или обычных классов, реализующих интерфейс java.lang.Runnable, запускаемых при старте сервера
#
# перечень через запятую динамических или обычных классов, реализующих интерфейс java.lang.Runnable, запускаемых при старте сервера [[config-on-start]]
#runOnStart=
# перечень через запятую динамических или обычных классов, объекты которых создаются при старте сервера, при перекомпиляции динамических классов создание объектов производится повторно
#createOnStart=
......@@ -124,7 +123,7 @@ scheduler.start=1
#
# EMail для экстренных уведомлений о проблемах в системе
#alarm.mail=
#
# 1 - база доступна только на чтение, отключение записи логов и сохранения параметров интерфейса
#db.readonly=1
====
......
......@@ -113,7 +113,7 @@ image::_res/ide_format.png[width='600px']
`bgerp_test.propertes` файл должен лежать в корне проекта.
Его можно скопировать из `bgerp.properties`, он не будет сохранён в GIT.
==== Создание БД
==== БД
Для создания БД использовать последовательно файлы:
[square]
* `db.sql` из пакета установки link:ftp://bgerp.ru/pub/bgerp/3.0[bgerp_3.0_xxxx.zip] - пользователь, база, таблицы;
......@@ -126,6 +126,12 @@ mysql --default-character-set=utf8 -uroot -p < db.sql
mysql --default-character-set=utf8 -uroot -p < bgerp.sql
----
Для <<db, обновления БД>> в дальнейшем при каждом запуске в `.properties` файле должна быть установлен <<kernel/setup.adoc#config-on-start, параметр>>:
[source]
----
runOnStart+=,ru.bgcrm.util.distr.DevDbUpdater
----
[[structure]]
=== Файлы
Перечень каталогов проекта с описанием.
......@@ -364,6 +370,12 @@ BGERP представляет из себя standalone Java приложени
IMPORTANT: Избегать смешения слоёв: логики вне Java, представления вне JSP, манипулирования данными вне MySQL.
[[db]]
=== БД
<<kernel/db.adoc#, Структура базы>> документируется в общем <<documentation, процессе>>, одновременно c внесением изменений.
В приложение база создаётся и <<kernel/install.adoc#update, обновляется>> набором SQL patch скриптов `build/update/patch*.sql`.
При <<ide-run, запуске в IDE>> скрипты могут быть выполнены автоматически.
[[action]]
=== Логика Java Actions
Action классы определяются в `struts-config*.xml` файлах, и привязываются к URL запроса. Имя метода передаётся в HTTP параметре запроса *action*.
......@@ -444,13 +456,13 @@ link:../../plugin/action/kernel.xml#L151-L152[plugin/action/kernel.xml]
[snippet, from="pu", to="}", remove-leading=" "]
link:../../src/ru/bgerp/plugin/blow/struts/action/BoardAction.java#L55-L74[ru.bgerp.plugin.blow.struts.action.BoardAction]
[[db]]
==== БД
[[action-db]]
==== Работа с БД
Работа с базой данных выполняется через отдельные Java DAO (Data Access Objects) классы. Непосредственно в акшенах используются уже они.
Обработка запросов <<action, акшенами>> производится транзакционно: транзакция начинается перед вызовом метода, далее подверждается (COMMIT) при возврате
результатов без ошибок либо отменяется (ROLLBACK) при выбросе исключения.
Соединение с базой передаётся в параметрах *con* акшен методов. Также есть варианты методов с параметром *conSet* (javadoc:ru.bgcrm.util.sql.ConnectionSet[]0), выдающим соединения по отдельному вызову.
Соединение с базой передаётся в параметрах *con* акшен методов. Также есть варианты методов с параметром *conSet* (javadoc:ru.bgcrm.util.sql.ConnectionSet[]), выдающим соединения по отдельному вызову.
Данный способ подходит для методов не требующих соединения с БД, либо же наоборот, требующих несколько видов соединений: реплики или мусорной для некритичных данных БД (пока не поддержана).
Имена таблиц указываются в константах, для повышения связанности кода, например: javadoc:ru.bgcrm.dao.Tables[]
......@@ -514,8 +526,8 @@ JS используется для обеспечения динамическо
В некоторых местах код JS генерируется на стороне сервера в JSP шаблонах.
Данный способ не очень предпочтителен, поскольку сложен для отладки в браузере.
Функции системы разбиты по объектам, выстроенных в иерархию от корневого объекта *$$*.
Например: link:../../webapps/js/crm.ajax.js[$$.ajax], link:../../webapps/js/crm.ui.js[$$.ui]
Функции системы разбиты по объектам, выстроенных в иерархию от корневого объекта *+++$$+++*.
Например: link:../../webapps/js/crm.ajax.js[+++$$+++.ajax], link:../../webapps/js/crm.ui.js[$$.ui]
Обычная схема привязки JS кода к HTML: установка обработчиков событий с вызовом функций, <<sample-jsp-ui, пример AJAX>>.
Устаревшие JS функции помечаются следующим образом:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment