Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions annotationeventdispatcher-parent/.gitignore

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -183,13 +183,13 @@ private static final class SerializedPageSerializer implements StreamSerializer<
@Override
public void write(ObjectDataOutput out, SerializedPage page) throws IOException {
out.writeInt(page.getPageId());
out.writeUTF(page.getPageType());
out.writeString(page.getPageType());
out.writeByteArray(page.getData());
}

@Override
public SerializedPage read(ObjectDataInput in) throws IOException {
return new SerializedPage(in.readInt(), in.readUTF(), in.readByteArray());
return new SerializedPage(in.readInt(), in.readString(), in.readByteArray());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,111 +18,98 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.RedisClient;
import redis.clients.jedis.util.SafeEncoder;

/**
* An IPageStore that saves serialized pages in Redis.
*/
public class RedisDataStore extends AbstractPersistentPageStore implements IPersistentPageStore {

private static final Logger LOGGER = LoggerFactory.getLogger(RedisDataStore.class);
/**
* A prefix for the keys to avoid duplication of entries
* in Redis entered by another process and to make
* it easier to find out who put the data at the server
*/
private static final String KEY_PREFIX = "Wicket-Redis";

/**
* A separator used for the key construction
*/
private static final String SEPARATOR = "|||";


private static final String ATTRIBUTES = "attributes";

private static final String ID = "id";

private static final String TYPE = "type";

private static final String SIZE = "size";

/**
* A pool of connections to the cluster
*/
private final JedisPool jedisPool;
private final RedisClient redis;

/**
* The various settings
*/
private final IRedisSettings settings;

/**
* Constructor.
*
* Creates a connection pool by using the hostname and port from
* the provided settings
*
* @param applicationname The name of wicket application
* @param settings The various settings
*/
public RedisDataStore(String applicationname, IRedisSettings settings) {
this(applicationname, createPool(settings), settings);
}

private static JedisPool createPool(IRedisSettings settings) {
Args.notNull(settings, "settings");

JedisPool pool = new JedisPool(settings.getHostname(), settings.getPort());
return pool;
}

/**
* Constructor.
*
* @param pool The pool with Jedis connections
* @param settings The various settings
*/
public RedisDataStore(String applicationname, JedisPool pool, IRedisSettings settings)
public RedisDataStore(String applicationname, IRedisSettings settings)
{
super(applicationname);

this.jedisPool = Args.notNull(pool, "pool");

this.settings = Args.notNull(settings, "settings");
this.redis = RedisClient.builder()
.hostAndPort(settings.getHostname(), settings.getPort())
.build();
}

@Override
public boolean supportsVersioning() {
return true;
}

@Override
protected IManageablePage getPersistedPage(String sessionIdentifier, int id) {
try (Jedis resource = jedisPool.getResource()) {
String key = makeKey(sessionIdentifier, id);
byte[] bytes = resource.get(SafeEncoder.encode(key));

String attributesKey = makeKey(sessionIdentifier, id, ATTRIBUTES);
String type = new String(resource.hmget(attributesKey, TYPE).get(0));

LOGGER.debug("Got {} for session '{}' and page id '{}'",
new Object[] {bytes != null ? "data" : "'null'", sessionIdentifier, id});

return new SerializedPage(id, type, bytes);
}
String key = makeKey(sessionIdentifier, id);
byte[] bytes = redis.get(SafeEncoder.encode(key));

String attributesKey = makeKey(sessionIdentifier, id, ATTRIBUTES);
String type = new String(redis.hmget(attributesKey, TYPE).get(0));

LOGGER.debug("Got {} for session '{}' and page id '{}'",
new Object[] {bytes != null ? "data" : "'null'", sessionIdentifier, id});

return new SerializedPage(id, type, bytes);
}

@Override
protected void removePersistedPage(String sessionIdentifier, IManageablePage page) {
try (Jedis resource = jedisPool.getResource())
{
String key = makeKey(sessionIdentifier, page.getPageId());
resource.del(key);
String key = makeKey(sessionIdentifier, page.getPageId());
redis.del(key);

String attributesKey = makeKey(sessionIdentifier, page.getPageId(), ATTRIBUTES);
resource.del(attributesKey);
}
String attributesKey = makeKey(sessionIdentifier, page.getPageId(), ATTRIBUTES);
redis.del(attributesKey);

LOGGER.debug("Deleted data for session '{}' and page with id '{}'", sessionIdentifier, page.getPageId());
}

@Override
protected void removeAllPersistedPages(String sessionIdentifier) {
try (Jedis resource = jedisPool.getResource()) {
String glob = makeKey(sessionIdentifier, "*");
Set<String> keys = resource.keys(glob);
for (String key : keys) {
resource.del(key);
}
String glob = makeKey(sessionIdentifier, "*");
Set<String> keys = redis.keys(glob);
for (String key : keys) {
redis.del(key);
}
LOGGER.debug("Deleted data for session '{}'", sessionIdentifier);
}
Expand All @@ -134,114 +121,88 @@ protected void addPersistedPage(String sessionIdentifier, IManageablePage page)
throw new WicketRuntimeException("RedisDataStore works with serialized pages only");
}
SerializedPage serializedPage = (SerializedPage)page;

try (Jedis resource = jedisPool.getResource()) {
String key = makeKey(sessionIdentifier, serializedPage.getPageId());
resource.set(SafeEncoder.encode(key), serializedPage.getData());

String attributesKey = makeKey(sessionIdentifier, serializedPage.getPageId(), ATTRIBUTES);
resource.hmset(attributesKey, makeHm(serializedPage));

if (settings.getRecordTtl() != null) {
resource.expire(key, (int) settings.getRecordTtl().toSeconds());
resource.expire(attributesKey, (int) settings.getRecordTtl().toSeconds());
}

String key = makeKey(sessionIdentifier, serializedPage.getPageId());
redis.set(SafeEncoder.encode(key), serializedPage.getData());

String attributesKey = makeKey(sessionIdentifier, serializedPage.getPageId(), ATTRIBUTES);
redis.hset(attributesKey, makeHm(serializedPage));

if (settings.getRecordTtl() != null) {
redis.expire(key, (int) settings.getRecordTtl().toSeconds());
redis.expire(attributesKey, (int) settings.getRecordTtl().toSeconds());
}
LOGGER.debug("Inserted data for session '{}' and page id '{}'", sessionIdentifier, page.getPageId());
}

@Override
public void destroy()
{
if (jedisPool != null)
{
jedisPool.destroy();
public void destroy() {
if (redis != null) {
redis.close();
}
}

@Override
public Set<String> getSessionIdentifiers()
{
Set<String> sessionIdentifiers = new HashSet<>();

try (Jedis resource = jedisPool.getResource()) {
String glob = makeKey("*");
Set<String> keys = resource.keys(glob);
for (String key : keys) {
if (key.indexOf(SEPARATOR, glob.length()) == -1) {
sessionIdentifiers.add(key);
}

String glob = makeKey("*");
Set<String> keys = redis.keys(glob);
for (String key : keys) {
if (key.indexOf(SEPARATOR, glob.length()) == -1) {
sessionIdentifiers.add(key);
}
}

return sessionIdentifiers;
}

@Override
public List<IPersistedPage> getPersistedPages(String sessionIdentifier) {
List<IPersistedPage> pages = new ArrayList<>();

try (Jedis resource = jedisPool.getResource()) {
String glob = makeKey(sessionIdentifier, "*");
Set<String> keys = resource.keys(glob);
for (String key : keys) {
if (key.endsWith(ATTRIBUTES)) {
PersistedPage page = parseHm(resource, key);

pages.add(page);
}

String glob = makeKey(sessionIdentifier, "*");
Set<String> keys = redis.keys(glob);
for (String key : keys) {
if (key.endsWith(ATTRIBUTES)) {
List<String> hm = redis.hmget(key, ID, TYPE, SIZE);

pages.add(new PersistedPage(Integer.parseInt(hm.get(0)), hm.get(1), Integer.parseInt(hm.get(2))));
}
}

return pages;
}

@Override
public Bytes getTotalSize() {
return null;
}

/**
* A prefix for the keys to avoid duplication of entries
* in Redis entered by another process and to make
* it easier to find out who put the data at the server
*/
private static final String KEY_PREFIX = "Wicket-Redis";

/**
* A separator used for the key construction
*/
private static final String SEPARATOR = "|||";

/**
* Creates a key in Redis.
*/
private String makeKey(Object... segments) {
StringBuilder string = new StringBuilder();

string.append(KEY_PREFIX);

for (Object segment : segments) {
string.append(SEPARATOR);
string.append(segment);
}

return string.toString();
}

private Map<String, String> makeHm(SerializedPage serializedPage) {
Map<String, String> hm = new HashMap<>();

hm.put(ID, String.valueOf(serializedPage.getPageId()));
hm.put(TYPE, serializedPage.getPageType());
hm.put(SIZE, String.valueOf(serializedPage.getData().length));

return hm;
}

private PersistedPage parseHm(Jedis resource, String key) {
List<String> hm = resource.hmget(key, ID, TYPE, SIZE);

return new PersistedPage(Integer.parseInt(hm.get(0)), hm.get(1), Integer.parseInt(hm.get(2)));
}
}
1 change: 0 additions & 1 deletion jamon-parent/jamon-examples/.gitignore

This file was deleted.

7 changes: 6 additions & 1 deletion phonebook/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,12 @@
</dependency>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-ehcache</artifactId>
<artifactId>hibernate-jcache</artifactId>
</dependency>
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<classifier>jakarta</classifier>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public Class<? extends Page> getHomePage()
@Override
protected void init()
{
getCspSettings().blocking().disabled();
super.init();

getComponentInstantiationListeners().add(new SpringComponentInjector(this, context(), true));
Expand Down
6 changes: 3 additions & 3 deletions phonebook/src/main/resources/persistence.hibernate.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<beans>

<!-- setup hibernate session factory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<bean id="sessionFactory" class="org.springframework.orm.jpa.hibernate.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
Expand All @@ -20,14 +20,14 @@
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.bytecode.use_reflection_optimizer">true</prop>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.jcache.internal.JCacheRegionFactory</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
</bean>

<!-- setup transaction manager -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<bean id="transactionManager" class="org.springframework.orm.jpa.hibernate.HibernateTransactionManager">
<property name="sessionFactory"><ref bean="sessionFactory"/></property>
</bean>

Expand Down
Loading
Loading