Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690

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

22.07.2017, 23:51. Показов 1721. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru