Replaced snapshot versions and addressed deprications

This commit moves all SNAPSHOT dependencies to the latest available
released versions.  It also addresses a number of deprications in the
Spring Data realm.  Specifically around the deprication of the
Neo4JOperations and the package reorganization within Hibernate.
This commit is contained in:
Michael Minella
2016-12-30 14:04:58 -06:00
parent e8a59846aa
commit 26b02fb836
21 changed files with 360 additions and 83 deletions

View File

@@ -20,6 +20,7 @@ import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.neo4j.ogm.session.SessionFactory;
import org.springframework.batch.item.ItemReader;
import org.springframework.beans.factory.InitializingBean;
@@ -63,6 +64,7 @@ public abstract class AbstractNeo4jItemReader<T> extends
protected Log logger = LogFactory.getLog(getClass());
private Neo4jOperations template;
private SessionFactory sessionFactory;
private String startStatement;
private String returnStatement;
@@ -143,16 +145,31 @@ public abstract class AbstractNeo4jItemReader<T> extends
this.orderByStatement = orderByStatement;
}
protected SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
/**
* Used to perform operations against the Neo4J database.
*
* @param template the Neo4jOperations instance to use
* @see Neo4jOperations
* @deprecated Use {@link #setSessionFactory(SessionFactory)}
*/
@Deprecated
public void setTemplate(Neo4jOperations template) {
this.template = template;
}
/**
* @return the {@link Neo4jOperations}
* @deprecated Use {@link #getSessionFactory()}
*/
@Deprecated
protected final Neo4jOperations getTemplate() {
return this.template;
}
@@ -197,7 +214,8 @@ public abstract class AbstractNeo4jItemReader<T> extends
*/
@Override
public void afterPropertiesSet() throws Exception {
Assert.state(template != null, "A Neo4JOperations implementation is required");
Assert.state(template != null || sessionFactory != null,
"A Neo4JOperations implementation or SessionFactory is required");
Assert.state(targetType != null, "The type to be returned is required");
Assert.state(StringUtils.hasText(startStatement), "A START statement is required");
Assert.state(StringUtils.hasText(returnStatement), "A RETURN statement is required");

View File

@@ -18,6 +18,9 @@ package org.springframework.batch.item.data;
import java.util.ArrayList;
import java.util.Iterator;
import org.neo4j.ogm.session.Session;
import org.neo4j.ogm.session.SessionFactory;
//
//import org.springframework.data.neo4j.conversion.ResultConverter;
@@ -32,8 +35,22 @@ public class Neo4jItemReader<T> extends AbstractNeo4jItemReader {
@Override
protected Iterator<T> doPageRead() {
Iterable queryResults = getTemplate().queryForObjects(
getTargetType(), generateLimitCypherQuery(), getParameterValues());
SessionFactory factory = getSessionFactory();
Iterable<T> queryResults;
if(factory != null) {
Session session = factory.openSession();
queryResults = session.query(getTargetType(),
generateLimitCypherQuery(),
getParameterValues());
}
else {
queryResults = getTemplate().queryForObjects(
getTargetType(), generateLimitCypherQuery(), getParameterValues());
}
if(queryResults != null) {
return queryResults.iterator();

View File

@@ -20,6 +20,9 @@ import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.neo4j.ogm.session.Session;
import org.neo4j.ogm.session.SessionFactory;
import org.springframework.batch.item.ItemWriter;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.data.neo4j.template.Neo4jOperations;
@@ -28,8 +31,7 @@ import org.springframework.util.CollectionUtils;
/**
* <p>
* A {@link ItemWriter} implementation that writes to a Neo4j database using an
* implementation of Spring Data's {@link Neo4jOperations}.
* A {@link ItemWriter} implementation that writes to a Neo4j database.
* </p>
*
* <p>
@@ -49,6 +51,10 @@ public class Neo4jItemWriter<T> implements ItemWriter<T>, InitializingBean {
private Neo4jOperations template;
private SessionFactory sessionFactory;
private boolean useSession = false;
public void setDelete(boolean delete) {
this.delete = delete;
}
@@ -57,11 +63,17 @@ public class Neo4jItemWriter<T> implements ItemWriter<T>, InitializingBean {
* Set the {@link Neo4jOperations} to be used to save items
*
* @param template the template implementation to be used
* @deprecated Use {@link #setSessionFactory(SessionFactory)}
*/
@Deprecated
public void setTemplate(Neo4jOperations template) {
this.template = template;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
/**
* Checks mandatory properties
*
@@ -69,7 +81,10 @@ public class Neo4jItemWriter<T> implements ItemWriter<T>, InitializingBean {
*/
@Override
public void afterPropertiesSet() throws Exception {
Assert.state(template != null, "A Neo4JOperations implementation is required");
Assert.state(template != null || this.sessionFactory != null,
"A Neo4JOperations implementation or a SessionFactory is required");
this.useSession = this.sessionFactory != null;
}
/**
@@ -92,13 +107,35 @@ public class Neo4jItemWriter<T> implements ItemWriter<T>, InitializingBean {
*/
protected void doWrite(List<? extends T> items) {
if(delete) {
for (T t : items) {
template.delete(t);
}
delete(items);
}
else {
for (T t : items) {
template.save(t);
save(items);
}
}
private void delete(List<? extends T> items) {
if(this.useSession) {
Session session = this.sessionFactory.openSession();
items.forEach(session::delete);
}
else {
for (T item : items) {
this.template.delete(item);
}
}
}
private void save(List<? extends T> items) {
if(this.useSession) {
Session session = this.sessionFactory.openSession();
items.forEach(session::save);
}
else {
for (T item : items) {
this.template.save(item);
}
}
}

View File

@@ -20,12 +20,13 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.hibernate.Query;
import org.hibernate.query.Query;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.StatelessSession;
import org.springframework.batch.item.database.orm.HibernateQueryProvider;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;

View File

@@ -16,7 +16,7 @@
package org.springframework.batch.item.database.orm;
import org.hibernate.Query;
import org.hibernate.query.Query;
import org.hibernate.Session;
import org.hibernate.StatelessSession;

View File

@@ -16,8 +16,9 @@
package org.springframework.batch.item.database.orm;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.query.NativeQuery;
import org.hibernate.query.Query;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
@@ -40,12 +41,12 @@ public class HibernateNativeQueryProvider<E> extends AbstractHibernateQueryProvi
/**
* <p>
* Create an {@link SQLQuery} from the session provided (preferring
* Create an {@link NativeQuery} from the session provided (preferring
* stateless if both are available).
* </p>
*/
@Override
public SQLQuery createQuery() {
public NativeQuery createQuery() {
if (isStatelessSession()) {
return getStatelessSession().createNativeQuery(sqlQuery).addEntity(entityClass);

View File

@@ -16,7 +16,7 @@
package org.springframework.batch.item.database.orm;
import org.hibernate.Query;
import org.hibernate.query.Query;
import org.hibernate.Session;
import org.hibernate.StatelessSession;
import org.springframework.batch.item.ItemReader;