010
Общее описание таблиц MongoDB
011
012
MyBPM создаёт в MongoDB несколько баз данных:
013
014
015 -
016
mybpm - содержит коллекции, в которых хранится
017 структурная информация. Данных для бизнеса тут нет, за некоторыми
018 исключениями.
019
020
021 -
022
mybpm_boi - здесь хранятся инстанции
023 бизнес-объектов (последние значения полей и мета-информация). В
024 этой БД есть коллекции, которые начинаются на boi_ а
025 дальше идёт идентификатор бизнес-объекта, который находиться в
026 коллекции mybpm.Bo.
027
028
029 -
030
mybpm_aux - тут хранятся всякие временные
031 данные.
032
033
034 -
035
mybpm_chat - здесь хранятся сообщения
036 чатов.
037
038
039 -
040
mybpm_event - тут находиться история изменений
041 инстанций бизнес-объектов подготовленная для отображении на
042 клиенте.
043
044
045 -
046
mybpm_process - здесь находятся данные о
047 состоянии бизнес-процессов. Какие шаги пройдены, а какие ещё
048 нет.
049
050
051 -
052
mybpm_sessions - здесь хранятся сессии
053 пользователей, и ключи защиты сессий.
054
055
056 -
057
mybpm_files - здесь хранятся файлы системы.
058
059
060
061
Коллекции в базе данных mybpm
062
063
064
065
066 | Коллекция |
067 Описание |
068
069
070
071
072
073 | Bo |
074 Хранит структуру бизнес-объектов. Так же здесь храниться
075 структура полей БО |
076
077
078
079 | BoGroup |
080 Группы бизнес-объектов |
081
082
083
084 | BoiInMigrationRef |
086 Связи инстанций БО с внешними идентификаторами БО при входящей
087 миграции из PostgreSQL |
088
089
090
091 | BoProcess |
092 Структура процессов (квадратики и стрелочки между ними) |
093
094
095
096 | BoProcessVersions |
098 Версии структур процессов по каждому БО процесса |
099
100
101
102 | BracketFilter |
103 Фильтры для меню слева |
104
105
106
107 | BracketPersonFilter |
109 Фильтры |
110
111
112
113 | CompanyDto |
114 Компания (аккаунт) |
115
116
117
118 | Department |
119 Департаменты |
120
121
122
123 | LiquidMongoUpdateDto |
125 Одноразовые задачи, и признак их применения (аналог liquibase
126 но для MongoDB) |
127
128
129
130 | MainMenuDto |
131 Меню слева |
132
133
134
135 | Person |
136 Пользователи в систему. Через них происходит аутентификация и
137 авторизация |
138
139
140
141 | PersonGroupLink |
142 Связи многие-ко-многим между пользователями и рабочими
143 группами |
144
145
146
147 | PersonSearch |
148 Информация о поиске пользователей |
149
150
151
152 | ReportGroup |
153 Группы отчётов |
154
155
156
157 | ScriptModule |
158 Модули скриптов (их структура - блоки и выражения связанные
159 между собой) |
160
161
162
163 | SignatureNcaValidation |
165 Подписи |
166
167
168
169 | SystemSettings |
170 Системные настройки |
171
172
173
174 | Token |
175 Токены пользователей для АПИ (API_TOKEN) |
176
177
178
179 | TouchedBoi |
180 Инстанции БО, которые подверглись воздействию |
181
182
183
184
185
Коллекции в базе данных mybpm_aux
186
187
188
189
190 | Коллекция |
191 Описание |
192
193
194
195
196
197 | AdminInvitation |
198 Подтверждение email для администраторов |
199
200
201
202 | BoiDraft |
203 Черновик изменения инстанций БО при ручном редактировании |
204
205
206
207 | BoImportError |
208 Ошибки импорта данные через xlsx |
209
210
211
212 | BoImportInstance |
213 Про-импортированные, но ещё не применённые, инстанции БО |
214
215
216
217 | Certificate |
218 Сертификаты для подписей |
219
220
221
222 | EmailVerifyInvitation |
224 Подтверждения email для обычных пользователей |
225
226
227
228 | GoProcess |
229 Очередь на исполнение (Go) процесса |
230
231
232
233 | GoProcessError |
234 Ошибки исполнения процессов |
235
236
237
238 | GoProcessGrouped |
239 Сгруппированная по идентификатору инстанции БО очередь на
240 исполнение процессов |
241
242
243
244 | LockTask |
245 Коллекция для осуществления блокировки задач |
246
247
248
249 | MobileVerify |
250 Сообщения для различных подтверждений пользователя через смс
251 или почту по сгенерированному коду |
252
253
254
255 | PersonInvitation |
256 Регистрационное приглашение пользователя |
257
258
259
260 | PersonPassword |
261 Список паролей пользователя |
262
263
264
265 | ReportCoViewStruct |
267 Структура вьюшки для ЦО. Её нужно отслеживать чтобы можно было
268 менять без ошибок со стороны PostgreSQL - он позволяет добавлять
269 поля в конец, но удалять и менять местами поля вьюшки нельзя. |
270
271
272
273 | ScriptModuleJar_1 |
274 Место где хранятся откомпилированные модули, которые являются
275 jar-файлами |
276
277
278
279 | UndoLog |
280 Ссылочная информация о журнала действий пользователя для
281 Ctrl+Z |
282
283
284
285 | UndoLogPage |
286 Журнал запоминания действий пользователя при редактировании
287 скриптов разбитый по страницам |
288
289
290
291 | UserNotificationRow |
293 Оповещение пользователям |
294
295
296
297
298
Коллекции в базе данных mybpm_boi
299
300
В этой БД лежат коллекции, которые начинаются на
301 boi_. Дальше идёт идентификатор БО. В этих коллекциях
302 лежат данные по инстанциям БО - это основная база данных, где
303 хранятся данные инстанций БО.
304
305
Коллекции в базе данных mybpm_process
306
307
Здесь хранятся данные по исполнению процессов. А именно шаги
308 исполнения. Какой процесс на каком месте исполняется.
309
310
В этой БД лежат коллекции, которые начинаются на
311 bo_process_. Дальше идёт идентификатор из таблицы
312 mybpm.BoProcess.
313
314
Коллекции в базе данных mybpm_files
315
316
Здесь используется механизм хранения файлов, которые подготовили
317 разработчики MongoDB. Называется она GridFS. Про неё можно
318 прочитать здесь: https://www.mongodb.com/docs/manual/core/gridfs/
320
321
Коллекции в базе данных
322 mybpm_sessions
323
324
Здесь хранится информация о сессиях работы пользователей в
325 системы.
326
327
В коллекции cryptoKeys хранятся ключи шифрования идентификаторов
328 сессии, которые нужны для того, чтобы нельзя было подсунуть
329 инородный идентификатор сессии. Эту коллекцию можно зачистить, и
330 тогда пользователи все вылетят из текущего сеанса работы. Система
331 автоматически создаст новые ключи шифрования. Пользователям нужно
332 будет ещё раз пройти процесс входа в систему.
333
334
В таблице sessionStorage хранится информация по сеансам работы
335 пользователе. Эту таблицу можно удалить, и тогда пользователям
336 придётся опять пройти процесс входа в систему.
337
338
Коллекции в базе данных mybpm_chat
339
340
341
342
343 | Коллекция |
344 Описание |
345
346
347
348
349
350 | ChatMessagePage |
351 Сообщения чата в соответствующей комнате, разбитые по
352 страницам, для возможности точечного доступа |
353
354
355
356 | ChatRoom |
357 Комнаты чатов. Обычно чаты парные (два собеседника в одном
358 чате). Но есть возможность использовать многопользовательские
359 чаты |
360
361
362
363
364
Коллекции в базе данных mybpm_event
365
366
BoiEventKafkaIdDto - данная коллекция содержит те
367 идентификаторы сообщений из кафки, которые были обработаны. Это
368 нужно, чтобы одно изменение не было учтено дважды. Кафка не
369 гарантирует одиночную обработку сообщений - иногда она может быть
370 обработана дважды.
371
372
boi_current_(boiId) - данные коллекции начинаются
373 на boi_current_ и заканчиваются идентификатором БО. В
374 этой коллекции скапливаются старые и новые значения полей. Это
375 нужно чтобы достоверно сгенерировать событие изменения поля со
376 старым\ и новым значением.
377
378
event_(boiId) - данные коллекции начинаются на
379 event_ и заканчиваются идентификатором БО. В этой
380 коллекции хранятся изменения по инстанции БО. Они разбиты на
381 страницы, чтобы можно было их загружать на клиента в режиме доступа
382 по одному идентификатору. В коллекции boi_current_...
383 храниться идентификатор первой страницы. А в первой странице, кроме
384 списка изменений, храниться ещё идентификатор следующей страницы. И
385 так можно загружать историю изменений вниз сколько нужно.
386
387
Отображение коллекций в Dto-классы
388
389
В системе для каждой коллекции существует Dto-класс, через
390 который происходит работа с этой коллекцией. Общая логика
391 ассоциации коллекции с Dto-классом осуществляется так:
392
393
Берётся имя коллекции, например Person. Дальше к ней добавляется
394 окончание Dto и получаем PersonDto и это значит, что существует
395 класс PersonDto, через который происходит работа с коллекцией из
396 Java. В этом классе описаны все поля и их предназначения.
397
398
Ассоциация эта происходит в классе MongoAccess.
399
400
401
at kz.greetgo.md_reader.util.MdUtil.xmlTextToDoc(MdUtil.java:80)
at kz.greetgo.md_reader.core.MdConverter.prepareHtmlFileFrom(MdConverter.java:136)
at kz.greetgo.md_reader.core.MdConverter.convert(MdConverter.java:208)
at kz.greetgo.md_reader.controller.RenderController.downloadToc(RenderController.java:360)
at kz.greetgo.md_reader.controller.RenderController.request(RenderController.java:108)
at jdk.internal.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at kz.greetgo.md_reader.interceptors.TextReplaceFilter.doFilter(TextReplaceFilter.java:36)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.io.IOException: Server returned HTTP response code: 429 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:2000)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:677)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1397)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1333)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.startPE(XMLDTDScannerImpl.java:732)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.skipSeparator(XMLDTDScannerImpl.java:2101)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDecls(XMLDTDScannerImpl.java:2064)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDTDExternalSubset(XMLDTDScannerImpl.java:299)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1165)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1040)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:943)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:247)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:342)
at java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:122)
at kz.greetgo.md_reader.util.MdUtil.xmlTextToDoc(MdUtil.java:71)
... 48 more