2
0
Fork 0

moved xpql over and test for release

This commit is contained in:
willem.cazander 2011-01-10 21:55:33 +01:00
parent a51eeeb254
commit fa06f4e015
56 changed files with 3009 additions and 158 deletions

10
vasc-xpql-ejb3/.classpath Normal file
View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java"/>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>

23
vasc-xpql-ejb3/.project Normal file
View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>vasc-xpql-ejb3</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.maven.ide.eclipse.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.maven.ide.eclipse.maven2Nature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,6 @@
#Mon Jan 10 02:21:44 CET 2011
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
org.eclipse.jdt.core.compiler.compliance=1.5
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.5

View file

@ -0,0 +1,9 @@
#Mon Jan 10 02:21:43 CET 2011
activeProfiles=
eclipse.preferences.version=1
fullBuildGoals=process-test-resources
includeModules=false
resolveWorkspaceProjects=true
resourceFilterGoals=process-resources resources\:testResources
skipCompilerPlugin=true
version=1

38
vasc-xpql-ejb3/pom.xml Normal file
View file

@ -0,0 +1,38 @@
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>vasc-base</artifactId>
<groupId>com.idcanet.vasc</groupId>
<version>0.3.1-SNAPSHOT</version>
</parent>
<groupId>com.idcanet.vasc</groupId>
<artifactId>vasc-xpql-ejb3</artifactId>
<version>0.3.1-SNAPSHOT</version>
<name>vasc-xpql-ejb3</name>
<description>xpql parsing service for ejb3</description>
<dependencies>
<dependency>
<groupId>com.idcanet.vasc</groupId>
<artifactId>vasc-xpql</artifactId>
<version>0.3.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>ejb-api</artifactId>
<version>3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.4.0.GA</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

View file

@ -0,0 +1,40 @@
package com.idcanet.vasc.xpql.ejb3;
import java.util.List;
import java.util.Map;
import javax.ejb.Local;
import javax.ejb.Remote;
import com.idcanet.vasc.xpql.query.Query;
/**
*
* @author Willem Cazander
* @version 1.0 17 Sep 2010
*/
public interface XpqlQueryManager {
public Query getQuery(String name);
public List<Object> execute(Query query);
public Object executeObject(Query query);
public Integer executeUpdate(Query query);
public List<Object> execute(String query,Map<String,Object> parameters);
public Object executeObject(String query,Map<String,Object> parameters);
public Integer executeUpdate(String query,Map<String,Object> parameters);
@Local
public interface ILocal extends XpqlQueryManager {
}
@Remote
public interface IRemote extends XpqlQueryManager {
}
}

View file

@ -0,0 +1,321 @@
package com.idcanet.vasc.xpql.ejb3;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.naming.InitialContext;
import javax.persistence.EntityManager;
import javax.transaction.UserTransaction;
import com.idcanet.vasc.xpql.QueryStore;
import com.idcanet.vasc.xpql.XPQLParser;
import com.idcanet.vasc.xpql.query.Query;
import com.idcanet.vasc.xpql.query.QueryParameterValue;
/**
*
* @author Willem Cazander
* @version 1.0 16 Jul 2007
*/
@Stateless(name="ejb/xpqlQueryManager")
@TransactionManagement(TransactionManagementType.BEAN)
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;
private Map<String,Query> queries = new HashMap<String,Query>(100);
@PostConstruct
public void loadAll() {
logger.fine("XtesManager created now loading resources...");
try {
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);
}
}
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;
}
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);
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);
}
}
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);
}
// TODO: move this hack to xtest xpql
if (query.getProperty("limit")!=null) {
int max = new Integer(query.getPropertyString("limit"));
q2.setMaxResults(max);
}
if (query.getProperty("offset")!=null) {
int offset = new Integer(query.getPropertyString("offset"));
q2.setFirstResult(offset);
}
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++;
}
return q2.getResultList();
}
@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);
}
// TODO: move this hack to xtest xpql
if (query.getProperty("limit")!=null) {
int max = new Integer(query.getPropertyString("limit"));
q2.setMaxResults(max);
}
if (query.getProperty("offset")!=null) {
int offset = new Integer(query.getPropertyString("offset"));
q2.setFirstResult(offset);
}
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++;
}
try {
utx.begin();
Object result = null;
try {
result = q2.getSingleResult();
utx.commit();
} finally {
if (result==null) {
utx.rollback();
}
}
return result;
} catch (Exception se) {
throw new RuntimeException("Transaction error: "+se.getMessage(),se);
}
}
public List<Object> execute(String name,Map<String,Object> parameters) {
Query query = getQuery(name);
if (parameters!=null) {
for (String key:parameters.keySet()) {
Object value = parameters.get(key);
query.setQueryParameter(key, value);
}
}
return execute(query);
}
public Object executeObject(String name,Map<String,Object> parameters) {
Query query = getQuery(name);
if (parameters!=null) {
for (String key:parameters.keySet()) {
Object value = parameters.get(key);
query.setQueryParameter(key, value);
}
}
return executeObject(query);
}
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();
utx.commit();
return result;
}
} catch (Exception se) {
throw new RuntimeException("Transaction error: "+se.getMessage(),se);
}
throw new IllegalStateException("unknow query type");
}
/**
* @see com.idcanet.showplanner.ejb.services.XtesManagerLocal#executeUpdate(java.lang.String, java.lang.String, java.util.Map)
*/
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);
}
return executeUpdate(query);
}
}

View file

View file

View file