Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690

Не получается связать Apache Ignite + Spring Data + Hibernate

22.07.2017, 23:51. Показов 1711. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу сделать следующую вещь:
Загрузить данные из бд, используя spring-data и hibernate, в кэш и дальше работать с ним с помощью ignit'а. Не получается на этом этапе:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class ClientStore implements CacheStore<Long, Client>, Serializable {
    private Logger logger = Logger.getLogger(ClientStore.class);
 
    @Autowired
    private ClientRepository clientRepository;
 
    @Override
    public void loadCache(IgniteBiInClosure<Long, Client> igniteBiInClosure, @Nullable Object... objects) throws CacheLoaderException {
        logger.info(clientRepository.findAll());
        Iterable<Client> clients = clientRepository.findAll();
 
        for(Client client : clients) {
            igniteBiInClosure.apply(client.getId(), client);
        }
    }
...
}


Конфигурация ignite:
Кликните здесь для просмотра всего текста
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
@Configuration
@EnableVaadin
@ComponentScan(basePackages = arrayOf("com.ignite.app"))
open class AppConfig {
    private val logger: Logger = Logger.getLogger(AppConfig::class.java)
 
    @Bean
    open fun igniteInstance(): Ignite? {
        val cfg = IgniteConfiguration()
 
        cfg.igniteInstanceName = "springDataNode"
 
        cfg.isPeerClassLoadingEnabled = true
 
 
        var clientCache: CacheConfiguration<Long, Client> = CacheConfiguration("ClientCache")
        clientCache.apply {
            setIndexedTypes(Long::class.java, Client::class.java)
            setCacheStoreFactory(FactoryBuilder.factoryOf(ClientStore::class.java))
            isReadThrough = true
            isWriteThrough = true
        }
 
        val storageCache: CacheConfiguration<Long, Storage> = CacheConfiguration("StorageCache")
        storageCache.apply {
            setIndexedTypes(Long::class.java, Storage::class.java)
            setCacheStoreFactory(FactoryBuilder.factoryOf(StorageStore::class.java))
            isReadThrough = true
            isWriteThrough = true
        }
 
        cfg.setCacheConfiguration(clientCache, storageCache)
 
        return Ignition.start(cfg)
    }
}


Если еще что-то нужно показать, то с радостью предоставлю код.

Idea указывает, что связывание с clientRepository есть, но на деле там null. Если же убрать все, что связано с ignite и дальше пользоваться spring-data+hibernate, то все ок.

В туториалах видел, что данные из бд в таком случае грузят напрямую, используя dataSource и sql запросы, но, опять-таки, хочется упростить себе задачу по загрузке и выгрузке данных.

Или, если не трудно, объясните тогда, как происходит загрузка и выгрузка данных из бд, используя ignite? В примерах в доках, где описано применение spring-data, адаптированного специально под ignite, там нет общения с базой данных вообще и все данные добавляются в кэш по ходу программы.

P.S. Знаю, что можно использовать ignite как кэш второго уровня для hibernate, но хотелось бы попробовать сделать иначе, а именно иметь связку spring-data+hibernate как прослойку между БД и ignite.

Добавлено через 11 минут
Погуглив еще раз, нашел, что как таковой поддержки hibernate ORM + ignite еще официально нет [?] и пока все находится на экспериментальном этапе.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2017, 23:51
Ответы с готовыми решениями:

Spring Data Hibernate mapping entity without xml
Здравствуйте! Подскажите пожалуйста, как настроить маппинг сущности без использование xml. Тут пишут, что если я навесил @Enity...

Oracle + spring-data + hibernate - создание записи и автоматическая генерация id
Нужно создать запись в таблице, но проблема в том, что таблица не имеет sequence , и в базе не хранятся счетчики созданных id в отдельной...

[Hibernate & Spring Data] Получить список объектов сущности из ManyToMany
Сущность User @Entity @Table(name = &quot;users&quot;) public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) ...

2
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
22.07.2017, 23:55
Игнайт, спринг, ваадин, какой-то богомерзкий язык. Ты бы как то изолировал, а потом бы логи почитал, например. сейчас проблема может быть примерно где угодно
0
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
23.07.2017, 00:53  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
какой-то богомерзкий язык


Цитата Сообщение от xoraxax Посмотреть сообщение
Ты бы как то изолировал,
Попробую быстренько набросать что-то максимально изолированное. Возможно, что где-то проблема в другом, а именно в том же ваадине

Не по теме:

Логи забыл выложить



Добавлено через 33 минуты
В общем, вот:
Main:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfiguration.class);
        Ignite ignite = context.getBean(Ignite.class);
 
        IgniteCache<Long, Client> clientIgniteCache = ignite.getOrCreateCache("ClientCache");
 
        try {
            clientIgniteCache.loadCache(null);
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        Map<Long, Client> clientMap = clientIgniteCache.getAll(new HashSet(Arrays.asList(1, 2)));
 
        for(Map.Entry<Long, Client> entry : clientMap.entrySet()) {
            System.out.println(entry.getValue());
        }
    }
}


Config:
Кликните здесь для просмотра всего текста
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
@Configuration
@ComponentScan(basePackages = arrayOf("com.ignite.cache"))
open class AppConfiguration {
 
    @Bean
    open fun igniteInstance(): Ignite? {
        val cfg = IgniteConfiguration()
 
        cfg.igniteInstanceName = "springDataNode"
 
        cfg.isPeerClassLoadingEnabled = true
 
 
        var clientCache: CacheConfiguration<Long, Client> = CacheConfiguration("ClientCache")
        clientCache.apply {
            setIndexedTypes(Long::class.java, Client::class.java)
            setCacheStoreFactory(FactoryBuilder.factoryOf(ClientStore::class.java))
            isReadThrough = true
            isWriteThrough = true
        }
 
        val storageCache: CacheConfiguration<Long, Storage> = CacheConfiguration("StorageCache")
        storageCache.apply {
            setIndexedTypes(Long::class.java, Storage::class.java)
            setCacheStoreFactory(FactoryBuilder.factoryOf(StorageStore::class.java))
            isReadThrough = true
            isWriteThrough = true
        }
 
        cfg.setCacheConfiguration(clientCache, storageCache)
 
        return Ignition.start(cfg)
    }
}


ClientStore:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Component
public class ClientStore implements CacheStore<Long, Client>, Serializable {
    private Logger logger = Logger.getLogger(ClientStore.class);
 
    @Autowired
    private IClientService clientRepository;
 
    @Override
    public void loadCache(IgniteBiInClosure<Long, Client> igniteBiInClosure, @Nullable Object... objects) throws CacheLoaderException {
        Iterable<Client> clients = clientRepository.findAll();
 
        for(Client client : clients) {
            igniteBiInClosure.apply(client.getId(), client);
        }
    }
...
}


Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Repository
interface ClientRepository : CrudRepository<Client, Long>
 
@Service
@Transactional
class ClientService : IClientService {
    private val logger: Logger = Logger.getLogger(ClientService::class.java)
 
    @Autowired
    lateinit var clientRepository: ClientRepository
...
 
    override fun findAll(): MutableIterable<Client> = clientRepository.findAll()
...
}


Добавлено через 1 минуту
Ошибки:
Кликните здесь для просмотра всего текста
Code
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
javax.cache.integration.CacheLoaderException: java.lang.NullPointerException
    at org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.loadCache(GridCacheStoreManagerAdapter.java:528)
    at org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter.localLoadCache(GridDhtCacheAdapter.java:486)
    at org.apache.ignite.internal.processors.cache.GridCacheProxyImpl.localLoadCache(GridCacheProxyImpl.java:217)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter$LoadCacheJob.localExecute(GridCacheAdapter.java:5439)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter$LoadCacheJobV2.localExecute(GridCacheAdapter.java:5488)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter$TopologyVersionAwareJob.execute(GridCacheAdapter.java:6103)
    at org.apache.ignite.compute.ComputeJobAdapter.call(ComputeJobAdapter.java:132)
    at org.apache.ignite.internal.processors.closure.GridClosureProcessor$C2.execute(GridClosureProcessor.java:1842)
    at org.apache.ignite.internal.processors.job.GridJobWorker$2.call(GridJobWorker.java:566)
    at org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6621)
    at org.apache.ignite.internal.processors.job.GridJobWorker.execute0(GridJobWorker.java:560)
    at org.apache.ignite.internal.processors.job.GridJobWorker.body(GridJobWorker.java:489)
    at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
    at org.apache.ignite.internal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1114)
    at org.apache.ignite.internal.processors.task.GridTaskWorker.sendRequest(GridTaskWorker.java:1379)
    at org.apache.ignite.internal.processors.task.GridTaskWorker.processMappedJobs(GridTaskWorker.java:640)
    at org.apache.ignite.internal.processors.task.GridTaskWorker.body(GridTaskWorker.java:532)
    at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
    at org.apache.ignite.internal.processors.task.GridTaskProcessor.startTask(GridTaskProcessor.java:743)
    at org.apache.ignite.internal.processors.task.GridTaskProcessor.execute(GridTaskProcessor.java:443)
    at org.apache.ignite.internal.processors.closure.GridClosureProcessor.callAsync(GridClosureProcessor.java:447)
    at org.apache.ignite.internal.processors.closure.GridClosureProcessor.callAsync(GridClosureProcessor.java:418)
    at org.apache.ignite.internal.processors.closure.GridClosureProcessor.callAsync(GridClosureProcessor.java:402)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter.globalLoadCacheAsync(GridCacheAdapter.java:3681)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter.globalLoadCache(GridCacheAdapter.java:3657)
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxy.loadCache(IgniteCacheProxy.java:387)
    at com.ignite.cache.Main.main(Main.java:25)
Caused by: java.lang.NullPointerException
    at com.ignite.cache.model.service.ClientStore.loadCache(ClientStore.java:34)
    at org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.loadCache(GridCacheStoreManagerAdapter.java:502)
    ... 26 more
июл 23, 2017 12:33:37 AM org.apache.ignite.logger.java.JavaLogger error
SEVERE: Failed to get values from dht cache [fut=GridCompoundIdentityFuture [super=GridCompoundFuture [rdc=Collection reducer: null, initFlag=1, lsnrCalls=0, done=true, cancelled=false, err=class o.a.i.IgniteCheckedException: java.lang.NullPointerException, futs=[false]]]]
class org.apache.ignite.IgniteCheckedException: java.lang.NullPointerException
    at org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.loadAllFromStore(GridCacheStoreManagerAdapter.java:480)
    at org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.loadAll(GridCacheStoreManagerAdapter.java:382)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter$16.call(GridCacheAdapter.java:2059)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter$16.call(GridCacheAdapter.java:2057)
    at org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6621)
    at org.apache.ignite.internal.processors.closure.GridClosureProcessor$2.body(GridClosureProcessor.java:954)
    at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javax.cache.integration.CacheLoaderException: java.lang.NullPointerException
    ... 10 more
Caused by: java.lang.NullPointerException
    at com.ignite.cache.model.service.ClientStore.loadAll(ClientStore.java:54)
    at org.apache.ignite.internal.processors.cache.CacheStoreBalancingWrapper.loadAll(CacheStoreBalancingWrapper.java:173)
    at org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.loadAllFromStore(GridCacheStoreManagerAdapter.java:469)
    ... 9 more
 
Exception in thread "main" javax.cache.integration.CacheLoaderException: java.lang.NullPointerException
    at org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.loadAllFromStore(GridCacheStoreManagerAdapter.java:480)
    at org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.loadAll(GridCacheStoreManagerAdapter.java:382)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter$16.call(GridCacheAdapter.java:2059)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter$16.call(GridCacheAdapter.java:2057)
    at org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6621)
    at org.apache.ignite.internal.processors.closure.GridClosureProcessor$2.body(GridClosureProcessor.java:954)
    at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
    at com.ignite.cache.model.service.ClientStore.loadAll(ClientStore.java:54)
    at org.apache.ignite.internal.processors.cache.CacheStoreBalancingWrapper.loadAll(CacheStoreBalancingWrapper.java:173)
    at org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.loadAllFromStore(GridCacheStoreManagerAdapter.java:469)
    ... 9 more


Добавлено через 1 минуту
Кажется, понял в чем проблема была.

Добавлено через 13 минут
Теперь получаю более конкретную ошибку:
Code
1
2
3
Caused by: class org.apache.ignite.IgniteCheckedException: Failed to validate cache configuration. Cache store factory is not serializable. Cache name: ClientCache
Caused by: class org.apache.ignite.IgniteCheckedException: Failed to serialize object: javax.cache.configuration.FactoryBuilder$SingletonFactory@7a1f45ed
Caused by: java.io.NotSerializableException: org.springframework.dao.support.PersistenceExceptionTranslationInterceptor
Я везде добавил Serializable, но ошибка все та же
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.07.2017, 00:53
Помогаю со студенческими работами здесь

Spring MVC. 404 ошибка при включении Spring Data JPA в проект
Добрый день. Есть простой шаблонный проект с использованием Spring MVC и Maven. С зависимостями Spring MVC проект собирается нормально и...

Hibernate 5 spring
я пытаюсь создать через класс утилиту объект session но при инициализации путь к hibernate.cfg.xml оно пытается отыскать в папке ...

Spring+Hibernate
Здравствуйте. Есть 3 таблицы: юзверы, роли, и таблица-связка. Хочу реализовать такое, регистрацию пользователя . Когда я добавляю...

Hibernate or spring
Имеет ли смысл использовать hibernate или spring когда есть встроенный в томкате средство для БД? что будет быстрее работать, важна...

Spring + Hibernate
Во многих статьях, где описывается пример Spring MVC + Hibernate описывается @Service На пример: public interface ContactDAO { ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru