Switch to new meta model,fixed small bugs and made demo work pretty oke.
This commit is contained in:
parent
afd821c360
commit
b3635cf64d
46 changed files with 1055 additions and 688 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue