2
0
Fork 0

Switch to new meta model,fixed small bugs and made demo work pretty oke.

This commit is contained in:
Willem Cazander 2013-01-11 23:48:36 +01:00
parent afd821c360
commit b3635cf64d
46 changed files with 1055 additions and 688 deletions

View file

@ -49,6 +49,7 @@ import net.forwardfire.vasc.xpql.query.QueryParameterValue;
/**
* XpqlQueryManagerImpl
*
* @author Willem Cazander
* @version 1.0 16 Jul 2007
@ -58,12 +59,11 @@ import net.forwardfire.vasc.xpql.query.QueryParameterValue;
public class XpqlQueryManagerImpl implements XpqlQueryManager.ILocal,XpqlQueryManager.IRemote {
private static final Logger logger = Logger.getLogger(XpqlQueryManagerImpl.class.getName());
private EntityManager entityManager;
@Resource
private UserTransaction utx;
@Resource
private UserTransaction utx;
private Map<String,Query> queries = new HashMap<String,Query>(100);
@PostConstruct
@ -73,117 +73,114 @@ public class XpqlQueryManagerImpl implements XpqlQueryManager.ILocal,XpqlQueryMa
long s = System.currentTimeMillis();
Map<String,String> keys = loadKeys();
for (String key:keys.keySet()) {
String value = keys.get(key);
if (key.startsWith("load")) {
loadResource(value);
}
if ("persistenceUnit".equals(key)) {
logger.fine("getting EntityManager: "+value);
entityManager = (EntityManager)new InitialContext().lookup(value);
}
}
for (String key:keys.keySet()) {
String value = keys.get(key);
if (key.startsWith("load")) {
loadResource(value);
}
if ("persistenceUnit".equals(key)) {
logger.fine("getting EntityManager: "+value);
entityManager = (EntityManager)new InitialContext().lookup(value);
}
}
long t = System.currentTimeMillis()-s;
logger.info("Total loaded xpql queries: "+queries.size()+" in "+t+" ms.");
} catch (Exception e) {
throw new RuntimeException("Error while load xpql resources error: "+e.getMessage(),e);
}
}
/**
* Loads xtes-xpql-ejb3.xml from meta-inf and gives the keys
*/
protected Map<String,String> loadKeys() throws IOException {
Properties properties = new Properties();
logger.fine("Getting urls");
Enumeration<URL> e = Thread.currentThread().getContextClassLoader().getResources("META-INF/xtes-xpql-ejb3.xml");
while(e.hasMoreElements()) {
URL u = e.nextElement();
logger.finer("Loading reletive namespaces of: "+u+" for: META-INF/xtes-xpql-ejb3.xml");
InputStream in = u.openStream();
try {
properties.loadFromXML(in);
} finally {
if (in!=null) {
in.close();
}
}
}
e = Thread.currentThread().getContextClassLoader().getResources("/META-INF/xtes-xpql-ejb3.xml");
while(e.hasMoreElements()) {
URL u = e.nextElement();
logger.finer("Loading root namespaces of: "+u+" for: /META-INF/xtes-xpql-ejb3.xml");
InputStream in = u.openStream();
try {
properties.loadFromXML(in);
} finally {
if (in!=null) {
in.close();
}
}
}
logger.fine("done loading");
Map<String,String> result = new HashMap<String,String>(20);
for (Object key:properties.keySet()) {
if (key instanceof String) {
String key2 = (String) key;
String value = properties.getProperty(key2);
result.put(key2, value);
}
}
return result;
}
/**
* Loads xtes-xpql-ejb3.xml from meta-inf and gives the keys
*/
protected Map<String,String> loadKeys() throws IOException {
Properties properties = new Properties();
logger.fine("Getting urls");
Enumeration<URL> e = Thread.currentThread().getContextClassLoader().getResources("META-INF/xtes-xpql-ejb3.xml");
while(e.hasMoreElements()) {
URL u = e.nextElement();
logger.finer("Loading reletive namespaces of: "+u+" for: META-INF/xtes-xpql-ejb3.xml");
InputStream in = u.openStream();
try {
properties.loadFromXML(in);
} finally {
if (in!=null) {
in.close();
}
}
}
e = Thread.currentThread().getContextClassLoader().getResources("/META-INF/xtes-xpql-ejb3.xml");
while(e.hasMoreElements()) {
URL u = e.nextElement();
logger.finer("Loading root namespaces of: "+u+" for: /META-INF/xtes-xpql-ejb3.xml");
InputStream in = u.openStream();
try {
properties.loadFromXML(in);
} finally {
if (in!=null) {
in.close();
}
}
}
logger.fine("done loading");
Map<String,String> result = new HashMap<String,String>(20);
for (Object key:properties.keySet()) {
if (key instanceof String) {
String key2 = (String) key;
String value = properties.getProperty(key2);
result.put(key2, value);
}
}
return result;
}
private void loadResource(String resource) {
XPQLParser parser = new XPQLParser();
logger.fine("Try loading: "+resource);
try {
private void loadResource(String resource) {
XPQLParser parser = new XPQLParser();
logger.fine("Try loading: "+resource);
try {
parser.parseResource(resource);
} catch (Exception e) {
throw new RuntimeException("Could not load xpql resource: "+resource+" error: "+e.getMessage(),e);
}
QueryStore store = parser.getQueryStore();
for (String key:store.getQueryNames()) {
Query q = store.getQuery(key);
QueryStore store = parser.getQueryStore();
for (String key:store.getQueryNames()) {
Query q = store.getQuery(key);
queries.put(q.getName(),q);
String out = "\n\n=========== SQL: "+q.getName()+"\n";
//out +=q.toSQL(q);
out +="=========== XML: "+q.getName()+"\n";
out +=q.toXML(q);
//out +="=========== Edit: "+q.getName()+"\n";
//out +=q.toEdit(q);
out +="=========== Prepard: "+q.getName()+"\n";
out +=q.toPreparedSQL(q)+"\n";
logger.finer("FOUND Query: "+out);
}
}
String out = "\n\n=========== SQL: "+q.getName()+"\n";
//out +=q.toSQL(q);
out +="=========== XML: "+q.getName()+"\n";
out +=q.toXML(q);
//out +="=========== Edit: "+q.getName()+"\n";
//out +=q.toEdit(q);
out +="=========== Prepard: "+q.getName()+"\n";
out +=q.toPreparedSQL(q)+"\n";
logger.finer("FOUND Query: "+out);
}
}
public Query getQuery(String name) {
Query q = queries.get(name);
return q;
}
@SuppressWarnings("unchecked")
public Query getQuery(String name) {
Query q = queries.get(name);
return q;
}
@SuppressWarnings("unchecked")
public List<Object> execute(Query query) {
String sql = query.toPreparedSQL(query);
logger.finer("Executing: "+query.getName()+" sql: "+sql);
javax.persistence.Query q2 = null;
if (Query.QueryType.hql==query.getType()) {
q2 = entityManager.createQuery(sql);
}
if (Query.QueryType.sql==query.getType()) {
q2 = entityManager.createNativeQuery(sql);
}
String sql = query.toPreparedSQL(query);
logger.finer("Executing: "+query.getName()+" sql: "+sql);
javax.persistence.Query q2 = null;
if (Query.QueryType.hql==query.getType()) {
q2 = entityManager.createQuery(sql);
}
if (Query.QueryType.sql==query.getType()) {
q2 = entityManager.createNativeQuery(sql);
}
// TODO: move this hack to xtest xpql
if (query.getProperty("limit")!=null) {
int max = new Integer(query.getPropertyString("limit"));
@ -193,9 +190,8 @@ public class XpqlQueryManagerImpl implements XpqlQueryManager.ILocal,XpqlQueryMa
int offset = new Integer(query.getPropertyString("offset"));
q2.setFirstResult(offset);
}
List<QueryParameterValue> options = query.getOrderQueryParameterValues();
List<QueryParameterValue> options = query.getOrderQueryParameterValues();
int i=1;
for ( QueryParameterValue value : options ) {
Object para = value.getValue();
@ -208,20 +204,19 @@ public class XpqlQueryManagerImpl implements XpqlQueryManager.ILocal,XpqlQueryMa
}
return q2.getResultList();
}
@SuppressWarnings("unchecked")
@SuppressWarnings("unchecked")
public Object executeObject(Query query) {
String sql = query.toPreparedSQL(query);
logger.finer("Executing: "+query.getName()+" sql: "+sql);
javax.persistence.Query q2 = null;
if (Query.QueryType.hql==query.getType()) {
q2 = entityManager.createQuery(sql);
}
if (Query.QueryType.sql==query.getType()) {
q2 = entityManager.createNativeQuery(sql);
}
String sql = query.toPreparedSQL(query);
logger.finer("Executing: "+query.getName()+" sql: "+sql);
javax.persistence.Query q2 = null;
if (Query.QueryType.hql==query.getType()) {
q2 = entityManager.createQuery(sql);
}
if (Query.QueryType.sql==query.getType()) {
q2 = entityManager.createNativeQuery(sql);
}
// TODO: move this hack to xtest xpql
if (query.getProperty("limit")!=null) {
int max = new Integer(query.getPropertyString("limit"));
@ -231,8 +226,8 @@ public class XpqlQueryManagerImpl implements XpqlQueryManager.ILocal,XpqlQueryMa
int offset = new Integer(query.getPropertyString("offset"));
q2.setFirstResult(offset);
}
List<QueryParameterValue> options = query.getOrderQueryParameterValues();
List<QueryParameterValue> options = query.getOrderQueryParameterValues();
int i=1;
for ( QueryParameterValue value : options ) {
Object para = value.getValue();
@ -255,9 +250,9 @@ public class XpqlQueryManagerImpl implements XpqlQueryManager.ILocal,XpqlQueryMa
}
}
return result;
} catch (Exception se) {
throw new RuntimeException("Transaction error: "+se.getMessage(),se);
}
} catch (Exception se) {
throw new RuntimeException("Transaction error: "+se.getMessage(),se);
}
}
public List<Object> execute(String name,Map<String,Object> parameters) {
@ -283,59 +278,59 @@ public class XpqlQueryManagerImpl implements XpqlQueryManager.ILocal,XpqlQueryMa
}
public Integer executeUpdate(Query query) {
String sql = query.toPreparedSQL(query);
logger.fine("Executing: "+query.getName()+" sql: "+sql);
try {
javax.persistence.Query q2 = null;
if (Query.QueryType.hql==query.getType()) {
q2 = entityManager.createQuery(sql);
List<QueryParameterValue> options = query.getOrderQueryParameterValues();
int i=1;
for ( QueryParameterValue value : options ) {
Object para = value.getValue();
if(para==null) {
para = value.getDefaultValue();
}
logger.finest( "nr: " + i + " value: " + para+" name: "+value.getName());
q2.setParameter(i,para);
i++;
}
utx.begin();
Integer result = q2.executeUpdate();
utx.commit();
return result;
}
if (Query.QueryType.sql==query.getType()) {
q2 = entityManager.createNativeQuery(sql);
List<QueryParameterValue> options = query.getOrderQueryParameterValues();
int i=1;
for ( QueryParameterValue value : options ) {
Object para = value.getValue();
if(para==null) {
para = value.getDefaultValue();
}
logger.finest( "nr: " + i + " value: " + para+" name: "+value.getName());
q2.setParameter(i,para);
i++;
}
utx.begin();
Integer result = q2.executeUpdate();
String sql = query.toPreparedSQL(query);
logger.fine("Executing: "+query.getName()+" sql: "+sql);
try {
javax.persistence.Query q2 = null;
if (Query.QueryType.hql==query.getType()) {
q2 = entityManager.createQuery(sql);
List<QueryParameterValue> options = query.getOrderQueryParameterValues();
int i=1;
for ( QueryParameterValue value : options ) {
Object para = value.getValue();
if(para==null) {
para = value.getDefaultValue();
}
logger.finest( "nr: " + i + " value: " + para+" name: "+value.getName());
q2.setParameter(i,para);
i++;
}
utx.begin();
Integer result = q2.executeUpdate();
utx.commit();
return result;
}
} catch (Exception se) {
throw new RuntimeException("Transaction error: "+se.getMessage(),se);
}
throw new IllegalStateException("unknow query type");
return result;
}
if (Query.QueryType.sql==query.getType()) {
q2 = entityManager.createNativeQuery(sql);
List<QueryParameterValue> options = query.getOrderQueryParameterValues();
int i=1;
for ( QueryParameterValue value : options ) {
Object para = value.getValue();
if(para==null) {
para = value.getDefaultValue();
}
logger.finest( "nr: " + i + " value: " + para+" name: "+value.getName());
q2.setParameter(i,para);
i++;
}
utx.begin();
Integer result = q2.executeUpdate();
utx.commit();
return result;
}
} catch (Exception se) {
throw new RuntimeException("Transaction error: "+se.getMessage(),se);
}
throw new IllegalStateException("unknow query type");
}
public Integer executeUpdate(String name,Map<String, Object> parameters) {
Query query = getQuery(name);
for (String key:parameters.keySet()) {
Object value = parameters.get(key);
query.setQueryParameter(key, value);
}
Object value = parameters.get(key);
query.setQueryParameter(key, value);
}
return executeUpdate(query);
}
}