Created
November 5, 2017 22:07
-
-
Save gokhanoner/cdeace124489b3c13efb0908bf1b559b to your computer and use it in GitHub Desktop.
hazelcast-hibernate5.2-spring_boot
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
spring.jpa.properties.hibernate.cache.region.factory_class=com.hazelcast.hibernate.HazelcastCacheRegionFactory | |
# Needed to use defined HazelcastInstance instead of creating a new one | |
spring.jpa.properties.hibernate.cache.hazelcast.instance_name=myHzInstance |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.hazelcasthibernatespring; | |
import com.hazelcast.config.Config; | |
import com.hazelcast.core.Hazelcast; | |
import com.hazelcast.core.HazelcastInstance; | |
import lombok.Data; | |
import org.hibernate.annotations.Cache; | |
import org.hibernate.annotations.CacheConcurrencyStrategy; | |
import org.hibernate.annotations.CreationTimestamp; | |
import org.springframework.boot.CommandLineRunner; | |
import org.springframework.boot.SpringApplication; | |
import org.springframework.boot.autoconfigure.SpringBootApplication; | |
import org.springframework.context.annotation.Bean; | |
import org.springframework.data.annotation.CreatedBy; | |
import org.springframework.data.jpa.repository.JpaRepository; | |
import javax.persistence.Column; | |
import javax.persistence.Entity; | |
import javax.persistence.GeneratedValue; | |
import javax.persistence.Id; | |
import java.time.LocalDateTime; | |
import java.util.UUID; | |
import java.util.stream.IntStream; | |
@SpringBootApplication | |
public class HazelcastHibernateSpringApplication { | |
public static void main(String[] args) { | |
SpringApplication.run(HazelcastHibernateSpringApplication.class, args); | |
} | |
//Only needed to check size in CLI Bean, otherwise created automatically by | |
// com.hazelcast.hibernate.instance.HazelcastInstanceLoader | |
@Bean | |
HazelcastInstance hazelcastInstance() { | |
Config config = new Config().setInstanceName("myHzInstance"); | |
return Hazelcast.newHazelcastInstance(config); | |
} | |
@Bean | |
CommandLineRunner clr(MyEntityRepo repo, HazelcastInstance hz) { | |
return (String... args) -> { | |
//save to DB | |
IntStream.range(0, 100) | |
.boxed() | |
.map(i -> MyEntity.of("name-" + i)) | |
.forEach(repo::save); | |
//get from Hazelcast to see Cache is working | |
System.out.println(hz.getMap(MyEntity.class.getSimpleName()).size()); | |
}; | |
} | |
} | |
interface MyEntityRepo extends JpaRepository<MyEntity, UUID> { | |
} | |
@Entity | |
@Data | |
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "MyEntity") | |
class MyEntity { | |
@Id | |
@GeneratedValue | |
private UUID id; | |
private String name; | |
@Column(updatable = false) | |
@CreatedBy | |
protected String createdBy; | |
@Column(updatable = false) | |
@CreationTimestamp | |
protected LocalDateTime createdOn; | |
public static MyEntity of(String name) { | |
MyEntity entity = new MyEntity(); | |
entity.setName(name); | |
return entity; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
<modelVersion>4.0.0</modelVersion> | |
<groupId>com.example</groupId> | |
<artifactId>hazelcast-hibernate-spring</artifactId> | |
<version>0.0.1-SNAPSHOT</version> | |
<packaging>jar</packaging> | |
<name>hazelcast-hibernate-spring</name> | |
<description>Demo project for Spring Boot</description> | |
<parent> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-parent</artifactId> | |
<version>1.5.8.RELEASE</version> | |
<relativePath/> <!-- lookup parent from repository --> | |
</parent> | |
<properties> | |
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | |
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> | |
<java.version>1.8</java.version> | |
<hazelcast.version>3.9</hazelcast.version> | |
<hibernate.version>5.2.12.Final</hibernate.version> | |
</properties> | |
<dependencies> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-data-jpa</artifactId> | |
</dependency> | |
<dependency> | |
<groupId>com.hazelcast</groupId> | |
<artifactId>hazelcast-hibernate52</artifactId> | |
<version>1.2.2</version> | |
</dependency> | |
<dependency> | |
<groupId>com.hazelcast</groupId> | |
<artifactId>hazelcast-spring</artifactId> | |
<version>${hazelcast.version}</version> | |
</dependency> | |
<dependency> | |
<groupId>com.h2database</groupId> | |
<artifactId>h2</artifactId> | |
<scope>runtime</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.projectlombok</groupId> | |
<artifactId>lombok</artifactId> | |
<optional>true</optional> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-test</artifactId> | |
<scope>test</scope> | |
</dependency> | |
</dependencies> | |
<build> | |
<plugins> | |
<plugin> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-maven-plugin</artifactId> | |
</plugin> | |
</plugins> | |
</build> | |
</project> |
OK, I've made that version change.
Also - I'm not using the code you have in your HazelcastHibernateSpringApplication
, because your comment says it's not needed.
But now I'm getting a different error:
2017-11-09 16:49:17.849 INFO 9536 --- [ restartedMain] c.h.h.HazelcastCacheRegionFactory : Starting up HazelcastCacheRegionFactory
2017-11-09 16:49:17.851 INFO 9536 --- [ restartedMain] c.h.h.i.IHazelcastInstanceFactory : Using existing HazelcastInstance [myHzInstance].
2017-11-09 16:49:17.853 WARN 9536 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
2017-11-09 16:49:18.224 ERROR 9536 --- [ restartedMain] o.s.boot.SpringApplication : Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
...
at com.blizzard.meetups.api.MeetupsApiApplication.main(MeetupsApiApplication.java:36)
...
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:967)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 21 common frames omitted
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.spi.CacheImplementor]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:271)
... 27 common frames omitted
Caused by: org.hibernate.cache.CacheException: No instance with name [myHzInstance] could be found.
at com.hazelcast.hibernate.instance.HazelcastInstanceLoader.loadInstance(HazelcastInstanceLoader.java:77)
at com.hazelcast.hibernate.AbstractHazelcastCacheRegionFactory.start(AbstractHazelcastCacheRegionFactory.java:97)
at org.hibernate.cache.spi.RegionFactory.start(RegionFactory.java:63)
at org.hibernate.internal.CacheImpl.<init>(CacheImpl.java:71)
at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:28)
at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:20)
at org.hibernate.service.internal.SessionFactoryServiceRegistryImpl.initiateService(SessionFactoryServiceRegistryImpl.java:59)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259)
... 33 common frames omitted
I've added the bean to my application, and now it works!
Members [1] {
Member [10.131.140.214]:5701 - 04b63181-c0bf-4d92-90fe-a81b8ca5fbca this
}
Thanks :)
In fact, it works with v3.9 as well.
But now I'm getting:
com.hazelcast.core.DuplicateInstanceNameException: HazelcastInstance with name 'meetup_api_hazelcast_cluster' already exists!
I need to figure out either why that's happening, or how to turn off caching during tests.
Any ideas?
Hi eric ,
How did you fix this issue ?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hey! Sorry for the delay. The hard drive in my laptop died. Blizzard has replaced it now, and I'm gonna give this a shot.
Since my hard drive has been wiped, I guess that covers the "removing hazelcast from your local maven repo" request. :)