Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для yuraha18
2 / 2 / 0
Регистрация: 16.12.2009
Сообщений: 261

Транзакционность для сервера

11.04.2017, 15:14. Показов 1009. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Сейчас пишу сервер для андроид приложения с помощью Spring и Hibernate (на стороне сервера) и retrofit на стороне приложения. Ситуация такая: у меня есть 14 таблиц в БД с разными полями, время от времени они обновляються в приложении, поэтому я отправляю эти обновления на сервер. Происходит это следующим образом: я нахожу в БД все одновленные поля из разных таблиц, и по одному отправляю их на сервер (пакую в разнотипные DTO и на сервере их принимаю). Но когда во время этой работы пропадет интернет на смартфоне или проблемы с БД, то получиться что часть данных обновилась, а часть нет. Это очень плохо, поэтому мне нужно сделать все с помощью транзакций, но я не знаю как ее прикрутить, ведь я не могу получить на сервере все обьекты для обновления (как выше написал, они приходят по-одному).
Может вы что-то подскажете по этому поводу?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.04.2017, 15:14
Ответы с готовыми решениями:

Выбор сервера для размещения на нем файлов для скачивания пользователями
Здравствуйте. Есть сейчас сайт на Юкозе, тамошнее дисковое пространство не бесконечно, а брать более дорогой тариф не вижу смысла. Поэтому...

Чем воспользоваться, для создания клиент-сервера для разных устройств
Здравствуйте. Возникла необходимость создать приложение, с помощью которого пользователи сети будут обмениваться разного рода...

Что нужно для создания сервера для мобильного приложения?
Добрый день. Необходимо сделать сервер для кросплатформенного мобильного приложения. В приложении будет присутствовать авторизация. Так...

6
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
11.04.2017, 16:29
Цитата Сообщение от yuraha18 Посмотреть сообщение
(как выше написал, они приходят по-одному
отправляй все сразу
0
 Аватар для yuraha18
2 / 2 / 0
Регистрация: 16.12.2009
Сообщений: 261
11.04.2017, 17:03  [ТС]
ну так у меня не получаеться разные типы обьъектов отправить одним запросом.
Сейчас у меня сделано так:

приложение отправляет объект DTOTask на сервер с помощью retrofit
Java
1
2
@POST(URL.TASK_URL+"/{id}")
    Call<DTOTask> saveTask(@Body DTOTask dto, @Path("id") long userId);
spring controller принимает и потом его сохраняет:
Java
1
2
3
4
5
6
7
8
9
10
11
12
@RestController
public class TaskController {
 
   @Autowired
   private TaskService service;
 
    @RequestMapping(value = Constants.TASK_URL+"/{userId}", method = RequestMethod.POST)
    @ResponseBody
    public Task saveTask(@RequestBody Task task,  @PathVariable long userId) {
        return service.save(task, userId);
    }
}
на сервере и в приложении есть типы объектов для распаковки/запаковки JSON с одинаковыми полями:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class DTOTask {
 
 
    @SerializedName("id")
    private long sid;
    private String taskText;
    private int priority;
 
    public DTOTask() {
    }
 
    public DTOTask(long sid, String taskText, int priority) {
        this.sid = sid;
        this.taskText = taskText;
        this.priority = priority;
    }
 
    public long getSid() {
        return sid;
    }
 
    public void setSid(long sid) {
        this.sid = sid;
    }
 
    public String getTaskText() {
        return taskText;
    }
 
    public void setTaskText(String taskText) {
        this.taskText = taskText;
    }
 
    public int getPriority() {
        return priority;
    }
 
    public void setPriority(int priority) {
        this.priority = priority;
    }
 
    @Override
    public String toString() {
        return "DTOTask{" +
                "sid=" + sid +
                ", taskText='" + taskText + '\'' +
                ", priority=" + priority +
                '}';
    }
}
И так для каждой из 14 таблиц. Я думал создать какой-то базовый интерфейс, унаследовать от него все DTO и посылать одним запросом, но Jackson тогда не знает как распаковать эти объекты
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
11.04.2017, 17:57
yuraha18, почему бы не создать DTO в котором будут все ваши типы которые вы посылаете и посылать его 1 раз?
0
 Аватар для yuraha18
2 / 2 / 0
Регистрация: 16.12.2009
Сообщений: 261
11.04.2017, 18:27  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
yuraha18, почему бы не создать DTO в котором будут все ваши типы которые вы посылаете и посылать его 1 раз?
идея хорошая. Можете подсказать как это реализовать?

П.С прикрепляю еще один DTO, который я отправляю. Вдруг понадобиться.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class Day  {
 
    @SerializedName("id")
    private long sid;
    private String text;
 
    public Day() {
    }
 
    public Day(long sid, String text) {
        this.sid = sid;
        this.text = text;
    }
 
    public long getSid() {
        return sid;
    }
 
    public void setSid(long sid) {
        this.sid = sid;
    }
 
    public String getText() {
        return text;
    }
 
    public void setText(String text) {
        this.text = text;
    }
 
@Override
    public String toString() {
        return "Day{" +
                "sid=" + sid +
                ", text='" + text + '\'' +
                '}';
    }
}
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
11.04.2017, 18:28
Лучший ответ Сообщение было отмечено yuraha18 как решение

Решение

yuraha18, если у вас есть классы Dto1, Dto2, Dto3, создайте класс
FullDto с полями
List<Dto1> dtos1;
List<Dto2> dtos2;
List<Dto3> dtos3;
1
 Аватар для yuraha18
2 / 2 / 0
Регистрация: 16.12.2009
Сообщений: 261
11.04.2017, 18:36  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
yuraha18, если у вас есть классы Dto1, Dto2, Dto3, создайте класс
FullDto с полями
List<Dto1> dtos1;
List<Dto2> dtos2;
List<Dto3> dtos3;
спасибо, сейчас буду дописывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.04.2017, 18:36
Помогаю со студенческими работами здесь

Как сохранять общие классы для Клиента и для Сервера?
В клиент-серверном приложении создал Класс, объектами которого пользуюсь для отправки данных. Класс получается общий, что для сервера, что...

Различие доступа для пользователей к папки для сервера 2008
Всем доброго времени суток. Сразу хочу извиниться за ошибки или что то говорю не так. Есть такая задача: Стоит сервер 2008 на сервере, и...

Ребят нужен технический совет по созданию приложения для для вывода ошибок с сервера
Здравствуйте, тут такое дело, в программировании android приложений я новичок, передо мной поставили на работе задачу создать приложение,...

Выбор книги или статей для создания приложений под Android (клиент для сервера)
С какой книги посоветуете начать изучение (желательно сразу на 4 версии). Важно что бы была глава про то как парсить json с сервера...

Программа для игрового сервера: возможность для игроков оперативно узнавать расценки на те или иные товары
Всем привет! Написал программу для игрового сервера, чтобы облегчить игрокам игровой процесс, чтобы они имели возможность оперативно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 19.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru