You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2011/01/18 00:54:05 UTC
svn commit: r1060139 - in /openjpa/trunk/openjpa-jest/src/main:
java/org/apache/openjpa/persistence/jest/
resources/org/apache/openjpa/persistence/jest/
resources/org/apache/openjpa/persistence/jest/help/
Author: ppoddar
Date: Mon Jan 17 23:54:05 2011
New Revision: 1060139
URL: http://svn.apache.org/viewvc?rev=1060139&view=rev
Log:
OPENJPA-1851: Code clean up + Rearrange constants
Modified:
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/AbstractCommand.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/Constants.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/DomainCommand.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/FindCommand.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTCommand.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTContext.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTServlet.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JPAServletContext.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JSONObject.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JSONObjectFormatter.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/MetamodelHelper.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/ObjectFormatter.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/ProcessingException.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/PropertiesCommand.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/QueryCommand.java
openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/XMLFormatter.java
openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/help/query.html
openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/jest.js
openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/localizer.properties
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/AbstractCommand.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/AbstractCommand.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/AbstractCommand.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/AbstractCommand.java Mon Jan 17 23:54:05 2011
@@ -22,7 +22,6 @@ package org.apache.openjpa.persistence.j
import static java.net.HttpURLConnection.HTTP_BAD_REQUEST;
import static org.apache.openjpa.persistence.jest.Constants.QUALIFIER_FORMAT;
import static org.apache.openjpa.persistence.jest.Constants.QUALIFIER_PLAN;
-import static org.apache.openjpa.persistence.jest.Constants._loc;
import java.io.IOException;
import java.io.PrintWriter;
@@ -41,6 +40,7 @@ import javax.servlet.http.HttpServletRes
import org.apache.openjpa.enhance.PersistenceCapable;
import org.apache.openjpa.kernel.BrokerImpl;
import org.apache.openjpa.kernel.OpenJPAStateManager;
+import org.apache.openjpa.lib.util.Localizer;
import org.apache.openjpa.persistence.FetchPlan;
import org.apache.openjpa.persistence.JPAFacadeHelper;
import org.apache.openjpa.persistence.OpenJPAEntityManager;
@@ -53,24 +53,31 @@ import org.apache.openjpa.persistence.Op
*
*/
abstract class AbstractCommand implements JESTCommand {
- public static final char EQUAL = '=';
- public static final String PATH_SEPARATOR = "/";
+ public static final char EQUAL = '=';
+ public static final String PATH_SEPARATOR = "/";
public static final Collection<String> EMPTY_LIST = Collections.emptySet();
protected ObjectFormatter<?> _formatter;
- protected static PrototypeFactory<Format,ObjectFormatter<?>> _ff =
- new PrototypeFactory<Format,ObjectFormatter<?>>();
private Map<String, String> _qualifiers = new HashMap<String, String>();
private Map<String, String> _args = new HashMap<String, String>();
private Map<String, String> _margs = new HashMap<String, String>();
- protected final JPAServletContext ctx;
+ protected final JPAServletContext _ctx;
+
+ private static PrototypeFactory<Format,ObjectFormatter<?>> _formatterFactory =
+ new PrototypeFactory<Format,ObjectFormatter<?>>();
+ protected static Localizer _loc = Localizer.forPackage(AbstractCommand.class);
static {
- _ff.register(Format.xml, XMLFormatter.class);
- _ff.register(Format.json, JSONObjectFormatter.class);
+ _formatterFactory.register(Format.xml, XMLFormatter.class);
+ _formatterFactory.register(Format.json, JSONObjectFormatter.class);
}
+
protected AbstractCommand(JPAServletContext ctx) {
- this.ctx = ctx;
+ _ctx = ctx;
+ }
+
+ public JPAServletContext getExecutionContext() {
+ return _ctx;
}
public String getMandatoryArgument(String key) {
@@ -123,7 +130,7 @@ abstract class AbstractCommand implement
* The qualifiers and arguments are immutable after parse.
*/
public void parse() throws ProcessingException {
- HttpServletRequest request = ctx.getRequest();
+ HttpServletRequest request = _ctx.getRequest();
String path = request.getPathInfo();
if (path != null) {
path = path.substring(1);
@@ -198,27 +205,27 @@ abstract class AbstractCommand implement
* Called post-parse to validate this command has requisite qualifiers and arguments.
*/
protected void validate() {
- HttpServletRequest request = ctx.getRequest();
+ HttpServletRequest request = _ctx.getRequest();
Collection<String> validQualifiers = getValidQualifiers();
for (String key : _qualifiers.keySet()) {
if (!validQualifiers.contains(key)) {
- throw new ProcessingException(ctx,_loc.get("parse-invalid-qualifier", this, key, validQualifiers),
+ throw new ProcessingException(_ctx,_loc.get("parse-invalid-qualifier", this, key, validQualifiers),
HTTP_BAD_REQUEST);
}
}
Collection<String> mandatoryArgs = getMandatoryArguments();
for (String key : mandatoryArgs) {
if (request.getParameter(key) == null) {
- throw new ProcessingException(ctx, _loc.get("parse-missing-mandatory-argument", this, key,
+ throw new ProcessingException(_ctx, _loc.get("parse-missing-mandatory-argument", this, key,
request.getParameterMap().keySet()), HTTP_BAD_REQUEST);
}
}
if (_args.size() < getMinimumArguments()) {
- throw new ProcessingException(ctx, _loc.get("parse-less-argument", this, _args.keySet(),
+ throw new ProcessingException(_ctx, _loc.get("parse-less-argument", this, _args.keySet(),
getMinimumArguments()), HTTP_BAD_REQUEST);
}
if (_args.size() > getMaximumArguments()) {
- throw new ProcessingException(ctx, _loc.get("parse-less-argument", this, _args.keySet(),
+ throw new ProcessingException(_ctx, _loc.get("parse-less-argument", this, _args.keySet(),
getMinimumArguments()), HTTP_BAD_REQUEST);
}
}
@@ -245,14 +252,14 @@ abstract class AbstractCommand implement
try {
format = Format.valueOf(rformat);
} catch (Exception e) {
- throw new ProcessingException(ctx, _loc.get("format-not-supported", new Object[]{format,
- ctx.getRequest().getPathInfo(), _ff.getRegisteredKeys()}), HTTP_BAD_REQUEST);
+ throw new ProcessingException(_ctx, _loc.get("format-not-supported", new Object[]{format,
+ _ctx.getRequest().getPathInfo(), _formatterFactory.getRegisteredKeys()}), HTTP_BAD_REQUEST);
}
}
- _formatter = _ff.newInstance(format);
+ _formatter = _formatterFactory.newInstance(format);
if (_formatter == null) {
- throw new ProcessingException(ctx, _loc.get("format-not-supported", new Object[]{format,
- ctx.getRequest().getPathInfo(), _ff.getRegisteredKeys()}), HTTP_BAD_REQUEST);
+ throw new ProcessingException(_ctx, _loc.get("format-not-supported", new Object[]{format,
+ _ctx.getRequest().getPathInfo(), _formatterFactory.getRegisteredKeys()}), HTTP_BAD_REQUEST);
}
}
return _formatter;
@@ -279,7 +286,7 @@ abstract class AbstractCommand implement
protected void pushFetchPlan(Object target) {
if (!hasQualifier(QUALIFIER_PLAN))
return;
- OpenJPAEntityManager em = ctx.getPersistenceContext();
+ OpenJPAEntityManager em = _ctx.getPersistenceContext();
FetchPlan plan = em.pushFetchPlan();
BrokerImpl broker = (BrokerImpl)JPAFacadeHelper.toBroker(em);
if (target instanceof OpenJPAEntityManager) {
@@ -302,7 +309,7 @@ abstract class AbstractCommand implement
protected void popFetchPlan(boolean finder) {
if (!hasQualifier(QUALIFIER_PLAN))
return;
- OpenJPAEntityManager em = ctx.getPersistenceContext();
+ OpenJPAEntityManager em = _ctx.getPersistenceContext();
BrokerImpl broker = (BrokerImpl)JPAFacadeHelper.toBroker(em);
if (finder) {
broker.setCacheFinderQuery(false);
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/Constants.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/Constants.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/Constants.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/Constants.java Mon Jan 17 23:54:05 2011
@@ -19,7 +19,6 @@
package org.apache.openjpa.persistence.jest;
-import org.apache.openjpa.lib.util.Localizer;
/**
* Static String constants
@@ -29,21 +28,10 @@ import org.apache.openjpa.lib.util.Local
*/
public interface Constants {
/**
- * Command Qualifiers
+ * Common Command Qualifiers
*/
public static final String QUALIFIER_FORMAT = "format";
public static final String QUALIFIER_PLAN = "plan";
- public static final String QUALIFIER_MAXRESULT = "max";
- public static final String QUALIFIER_FIRSTRESULT = "first";
- public static final String QUALIFIER_NAMED = "named";
- public static final String QUALIFIER_SINGLE = "single";
-
- /**
- * Command Arguments
- */
- public static final String ARG_QUERY = "q";
- public static final String ARG_TYPE = "type";
-
/**
* Mime Types
@@ -54,14 +42,6 @@ public interface Constants {
public static final String MIME_TYPE_XML = "text/xml";
public static final String MIME_TYPE_JSON = "application/json";
- public static final String CONTEXT_ROOT = "/";
- public static final String JEST_TEMPLATE = "jest.html";
-
- /**
- * Servlet initialization parameters
- */
- public static final String INIT_PARA_UNIT = "persistence.unit";
- public static final String INIT_PARA_STANDALONE = "standalone";
/**
* Dojo Toolkit URL and Themes
@@ -123,18 +103,11 @@ public interface Constants {
/**
* JEST resources
*/
-// public static final String JEST_STYLESHEET = "jest.css";
-// public static final String JEST_SCRIPT_INSTANCES = "instances.js";
-// public static final String JEST_SCRIPT_DOMAIN = "model.js";
public static final String JEST_INSTANCE_XSD = "jest-instance.xsd";
static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
- /**
- * Common instances
- */
- public static final Localizer _loc = Localizer.forPackage(JESTContext.class);
public static final String NULL_VALUE = "null";
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/DomainCommand.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/DomainCommand.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/DomainCommand.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/DomainCommand.java Mon Jan 17 23:54:05 2011
@@ -24,9 +24,6 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.List;
-import static org.apache.openjpa.persistence.jest.Constants.ARG_TYPE;
-import static org.apache.openjpa.persistence.jest.Constants._loc;
-
/**
* Marshals a JPA meta-model in the configured format to the response output stream.
*
@@ -53,8 +50,12 @@ class DomainCommand extends AbstractComm
}
public void process() throws ProcessingException, IOException {
- getObjectFormatter().writeOut(ctx.getPersistenceContext().getMetamodel(),
+ JPAServletContext ctx = getExecutionContext();
+ ObjectFormatter<?> formatter = getObjectFormatter();
+ ctx.getResponse().setContentType(formatter.getMimeType());
+ formatter.writeOut(ctx.getPersistenceContext().getMetamodel(),
_loc.get("domain-title").toString(), _loc.get("domain-desc").toString(), ctx.getRequestURI(),
ctx.getResponse().getOutputStream());
+
}
}
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/FindCommand.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/FindCommand.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/FindCommand.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/FindCommand.java Mon Jan 17 23:54:05 2011
@@ -18,7 +18,6 @@
*/
package org.apache.openjpa.persistence.jest;
-import static org.apache.openjpa.persistence.jest.Constants.*;
import java.io.IOException;
import java.net.HttpURLConnection;
@@ -29,8 +28,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import javax.persistence.EntityManager;
-
import org.apache.openjpa.kernel.OpenJPAStateManager;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.persistence.OpenJPAEntityManager;
@@ -42,6 +39,7 @@ import org.apache.openjpa.util.Applicati
*
*/
class FindCommand extends AbstractCommand {
+ private static final String ARG_TYPE = "type";
private static final List<String> _mandatoryArgs = Arrays.asList(ARG_TYPE);
private static final List<String> _validQualifiers = Arrays.asList("format", "plan");
@@ -65,6 +63,7 @@ class FindCommand extends AbstractComman
@Override
public void process() throws ProcessingException {
+ JPAServletContext ctx = getExecutionContext();
OpenJPAEntityManager em = ctx.getPersistenceContext();
String type = getMandatoryArgument(ARG_TYPE);
ClassMetaData meta = ctx.resolve(type);
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTCommand.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTCommand.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTCommand.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTCommand.java Mon Jan 17 23:54:05 2011
@@ -63,30 +63,74 @@ public interface JESTCommand {
public static enum Format {xml, json};
/**
+ * Get the execution context of this command.
+ *
+ * @return the execution context. never null.
+ */
+ public JPAServletContext getExecutionContext();
+
+ /**
* Parse the given request to populate qualifiers and parameters of this command.
* A command can interpret and consume certain path segments or parameters of the
* original request. During {@link #process(ServletRequest, ServletResponse, JPAServletContext) processing}
* phase, the parameters and qualifiers are accessed from the parsed command itself rather than
- * from the
+ * from the original HTTP request.
*/
public void parse() throws ProcessingException;
/**
- * Accessors for this command's arguments and qualifiers.
- * @return
+ * Process the given request and write the output on to the given response in the given context.
+ * @throws ProcessingException
+ *
+ */
+ public void process() throws ProcessingException, IOException;
+
+
+ /**
+ * Get this command's arguments.
+ *
* @exception IllegalStateException if accessed prior to parsing.
*/
public Map<String,String> getArguments();
+
+ /**
+ * Get the value of this command's argument of the given name.
+ *
+ * @return null if the argument does not exist.
+ *
+ * @exception IllegalStateException if accessed prior to parsing.
+ */
public String getArgument(String key);
+
+
+ /**
+ * Affirm this command contains an argument of the given name.
+ *
+ * @exception IllegalStateException if accessed prior to parsing.
+ */
public boolean hasArgument(String key);
+
+ /**
+ * Get this command's qualifiers.
+ *
+ * @exception IllegalStateException if accessed prior to parsing.
+ */
public Map<String,String> getQualifiers();
+
+ /**
+ * Get the value of this command's qualifier of the given name.
+ *
+ * @return null if the qualifier does not exist.
+ *
+ * @exception IllegalStateException if accessed prior to parsing.
+ */
public String getQualifier(String key);
- public boolean hasQualifier(String key);
/**
- * Process the given request and write the output on to the given response in the given context.
- * @throws ProcessingException
+ * Affirm this command contains an qualifier of the given name.
*
+ * @exception IllegalStateException if accessed prior to parsing.
*/
- public void process() throws ProcessingException, IOException;
+ public boolean hasQualifier(String key);
+
}
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTContext.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTContext.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTContext.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTContext.java Mon Jan 17 23:54:05 2011
@@ -19,18 +19,12 @@
package org.apache.openjpa.persistence.jest;
-import static java.net.HttpURLConnection.HTTP_INTERNAL_ERROR;
import static java.net.HttpURLConnection.HTTP_NOT_FOUND;
-import static org.apache.openjpa.persistence.jest.Constants.CONTEXT_ROOT;
-import java.io.ByteArrayOutputStream;
import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.URI;
-import java.net.URISyntaxException;
import java.util.Calendar;
import java.util.Date;
@@ -68,6 +62,9 @@ public class JESTContext implements JPAS
public static final Localizer _loc = Localizer.forPackage(JESTContext.class);
private static final String ONE_YEAR_FROM_NOW;
public static final char QUERY_SEPARATOR = '?';
+ public static final String CONTEXT_ROOT = "/";
+ public static final String JEST_TEMPLATE = "jest.html";
+
/**
* Registers known commands in a {@link PrototypeFactory registry}.
@@ -123,17 +120,13 @@ public class JESTContext implements JPAS
/**
*
*/
- public URI getRequestURI() {
+ public String getRequestURI() {
StringBuffer buf = _request.getRequestURL();
String query = _request.getQueryString();
- if (query != null) {
+ if (!isEmpty(query)) {
buf.append(QUERY_SEPARATOR).append(query);
}
- try {
- return new URI(buf.toString());
- } catch (URISyntaxException e) {
- throw new ProcessingException(this, _loc.get("bad-uri", _request.getRequestURL()), HTTP_INTERNAL_ERROR);
- }
+ return buf.toString();
}
@@ -236,13 +229,16 @@ public class JESTContext implements JPAS
if (in == null) { // try again as a relative path
if (rsrc.startsWith(CONTEXT_ROOT)) {
in = getClass().getResourceAsStream(rsrc.substring(1));
- if (in == null) {
- throw new ProcessingException(this, _loc.get("resource-not-found", rsrc), HTTP_NOT_FOUND);
- }
+ }
+ if (in == null) {
+ throw new ProcessingException(this, _loc.get("resource-not-found", rsrc), HTTP_NOT_FOUND);
}
}
try {
String mimeType = _request.getSession().getServletContext().getMimeType(rsrc);
+ if (mimeType == null) {
+ mimeType = "application/text";
+ }
_response.setContentType(mimeType);
OutputStream out = _response.getOutputStream();
if (mimeType.startsWith("image/")) {
@@ -262,13 +258,7 @@ public class JESTContext implements JPAS
throw new ProcessingException(this, e, _loc.get("resource-not-found", rsrc), HTTP_NOT_FOUND);
}
}
-
-
-
- private void log(String s) {
- log((short)-1, s);
- }
-
+
public void log(short level, String message) {
switch (level) {
case Log.INFO: _log.info(message); break;
@@ -291,6 +281,10 @@ public class JESTContext implements JPAS
return (path == null || CONTEXT_ROOT.equals(path));
}
+ boolean isEmpty(String s) {
+ return s == null || s.trim().length() == 0;
+ }
+
/**
* Root resource is a HTML template with deployment specific tokens such as name of the persistence unit
* or base url. On first request for this resource, the tokens in the templated HTML file gets replaced
@@ -320,7 +314,7 @@ public class JESTContext implements JPAS
"${dojo.theme}", Constants.DOJO_THEME,
};
- InputStream in = getClass().getResourceAsStream(Constants.JEST_TEMPLATE);
+ InputStream in = getClass().getResourceAsStream(JEST_TEMPLATE);
CharArrayWriter out = new CharArrayWriter();
new TokenReplacedStream().replace(in, out, tokens);
_rootResource = out.toString();
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTServlet.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTServlet.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTServlet.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JESTServlet.java Mon Jan 17 23:54:05 2011
@@ -19,13 +19,7 @@
package org.apache.openjpa.persistence.jest;
-import static org.apache.openjpa.persistence.jest.Constants.INIT_PARA_UNIT;
-import static org.apache.openjpa.persistence.jest.Constants.INIT_PARA_STANDALONE;
-import static org.apache.openjpa.persistence.jest.Constants._loc;
-
import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
import javax.persistence.Persistence;
import javax.servlet.ServletConfig;
@@ -36,6 +30,7 @@ import javax.servlet.http.HttpServletRes
import org.apache.openjpa.kernel.AbstractBrokerFactory;
import org.apache.openjpa.kernel.BrokerFactory;
+import org.apache.openjpa.lib.util.Localizer;
import org.apache.openjpa.persistence.JPAFacadeHelper;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactory;
import org.apache.openjpa.persistence.OpenJPAPersistence;
@@ -67,9 +62,17 @@ import org.apache.openjpa.persistence.Op
*/
@SuppressWarnings("serial")
public class JESTServlet extends HttpServlet {
+ /**
+ * Servlet initialization parameter monikers
+ */
+ public static final String INIT_PARA_UNIT = "persistence.unit";
+ public static final String INIT_PARA_STANDALONE = "standalone";
+
+
private String _unit;
private boolean _debug;
private OpenJPAEntityManagerFactory _emf;
+ protected static Localizer _loc = Localizer.forPackage(JESTServlet.class);
@Override
public void init(ServletConfig config) throws ServletException {
@@ -80,6 +83,7 @@ public class JESTServlet extends HttpSer
throw new ServletException(_loc.get("no-persistence-unit-param").toString());
}
boolean standalone = "true".equalsIgnoreCase(config.getInitParameter(INIT_PARA_STANDALONE));
+ System.err.println("Standalone Deployment Mode " + standalone);
if (standalone) {
createPersistenceUnit();
}
@@ -111,19 +115,24 @@ public class JESTServlet extends HttpSer
protected void createPersistenceUnit() throws ServletException {
try {
- Map<String, Object> map = new HashMap<String, Object>();
- map.put("openjpa.EntityManagerFactoryPool", true);
- _emf = OpenJPAPersistence.cast(Persistence.createEntityManagerFactory(_unit, map));
+ System.err.println("Creating Standalone Persistent Unit " + _unit + ":" + _emf);
+ _emf = OpenJPAPersistence.cast(Persistence.createEntityManagerFactory(_unit));
+ System.err.println("Created Standalone Persistent Unit " + _unit + ":" + _emf);
} catch (Exception e) {
- throw new ServletException(_loc.get("no-persistence-unit").toString(), e);
+ System.err.println("Can not creating Standalone Persistent Unit " + _unit);
+ e.printStackTrace();
+ throw new ServletException(_loc.get("no-persistence-unit-standalone", _unit).toString(), e);
}
}
+
protected boolean findPersistenceUnit() {
if (_emf == null) {
+ System.err.println("Discovering auxiliary Persistent Unit " + _unit);
BrokerFactory bf = AbstractBrokerFactory.getPooledFactoryForKey(_unit);
if (bf != null) {
_emf = (OpenJPAEntityManagerFactory)bf.getUserObject(JPAFacadeHelper.EMF_KEY);
}
+ System.err.println("Discovered auxiliary Persistent Unit " + _unit + ":" + _emf);
}
return _emf != null;
}
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JPAServletContext.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JPAServletContext.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JPAServletContext.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JPAServletContext.java Mon Jan 17 23:54:05 2011
@@ -19,8 +19,6 @@
package org.apache.openjpa.persistence.jest;
-import java.net.URI;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -60,7 +58,7 @@ public interface JPAServletContext {
* Get the requested URI.
* @return
*/
- public URI getRequestURI();
+ public String getRequestURI();
/**
* Resolve the given alias to meta-data of the persistent type.
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JSONObject.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JSONObject.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JSONObject.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JSONObject.java Mon Jan 17 23:54:05 2011
@@ -128,12 +128,19 @@ public class JSONObject implements JSON
return new StringBuilder().append(QUOTE).append(o.toString()).append(QUOTE);
}
+ /**
+ * An array of objects. Members can be JSON too.
+ *
+ * @author Pinaki Poddar
+ *
+ */
public static class Array implements JSON {
private List<Object> _members = new ArrayList<Object>();
public void add(Object o) {
_members.add(o);
}
+
public String toString() {
return asString(0).toString();
}
@@ -143,11 +150,11 @@ public class JSONObject implements JSON
StringBuilder tab = JSONObject.newIndent(indent+1);
for (Object o : _members) {
if (buf.length() > 1) buf.append(MEMBER_SEPARATOR);
- buf.append(NEWLINE);
+ buf.append(NEWLINE).append(tab);
if (o instanceof JSON)
- buf.append(tab).append(((JSON)o).asString(indent+1));
+ buf.append(((JSON)o).asString(indent+1));
else
- buf.append(tab).append(o);
+ buf.append(o);
}
buf.append(NEWLINE)
.append(JSONObject.newIndent(indent))
@@ -157,6 +164,13 @@ public class JSONObject implements JSON
}
}
+ /**
+ * A map whose key or value can be JSON.
+ * A map is encoded as JSON as an array of entries. Each entry is a key value pair separated with :
+ *
+ * @author Pinaki Poddar
+ *
+ */
public static class KVMap implements JSON {
private Map<Object,Object> _entries = new LinkedHashMap<Object,Object>();
@@ -172,19 +186,21 @@ public class JSONObject implements JSON
StringBuilder buf = new StringBuilder().append(ARRAY_START);
StringBuilder tab = JSONObject.newIndent(indent+1);
for (Map.Entry<Object, Object> e : _entries.entrySet()) {
- if (buf.length()>1) buf.append(MEMBER_SEPARATOR);
- buf.append(NEWLINE);
+ if (buf.length() > 1) buf.append(MEMBER_SEPARATOR);
+ buf.append(NEWLINE).append(tab);
Object key = e.getKey();
- if (key instanceof JSON)
- buf.append(tab).append(((JSON)key).asString(indent+1));
- else
- buf.append(tab).append(key);
+ if (key instanceof JSON) {
+ buf.append(((JSON)key).asString(indent+1));
+ } else {
+ buf.append(key);
+ }
buf.append(VALUE_SEPARATOR);
Object value = e.getValue();
- if (value instanceof JSON)
+ if (value instanceof JSON) {
buf.append(((JSON)value).asString(indent+2));
- else
+ } else {
buf.append(value);
+ }
}
buf.append(NEWLINE)
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JSONObjectFormatter.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JSONObjectFormatter.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JSONObjectFormatter.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/JSONObjectFormatter.java Mon Jan 17 23:54:05 2011
@@ -27,7 +27,6 @@ import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
-import java.net.URI;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Collection;
@@ -77,7 +76,7 @@ public class JSONObjectFormatter impleme
}
public JSON writeOut(Collection<OpenJPAStateManager> sms, Metamodel model, String title, String desc,
- URI uri, OutputStream out) throws IOException {
+ String uri, OutputStream out) throws IOException {
JSON json = encode(sms,model);
out.write(json.toString().getBytes());
return json;
@@ -290,7 +289,7 @@ public class JSONObjectFormatter impleme
}
@Override
- public JSON writeOut(Metamodel model, String title, String desc, URI uri, OutputStream out) throws IOException {
+ public JSON writeOut(Metamodel model, String title, String desc, String uri, OutputStream out) throws IOException {
throw new UnsupportedOperationException();
}
}
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/MetamodelHelper.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/MetamodelHelper.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/MetamodelHelper.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/MetamodelHelper.java Mon Jan 17 23:54:05 2011
@@ -34,7 +34,6 @@ import javax.persistence.metamodel.Singu
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.meta.JavaTypes;
import org.apache.openjpa.persistence.meta.Members;
-import static org.apache.openjpa.persistence.jest.Constants.*;
/**
* @author Pinaki Poddar
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/ObjectFormatter.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/ObjectFormatter.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/ObjectFormatter.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/ObjectFormatter.java Mon Jan 17 23:54:05 2011
@@ -21,7 +21,6 @@ package org.apache.openjpa.persistence.j
import java.io.IOException;
import java.io.OutputStream;
-import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.Collection;
@@ -93,7 +92,7 @@ public interface ObjectFormatter<T> {
* @throws IOException
*/
public T writeOut(Collection<OpenJPAStateManager> objs, Metamodel model,
- String title, String desc, URI uri, OutputStream out) throws IOException;
+ String title, String desc, String uri, OutputStream out) throws IOException;
/**
* Encodes the given domain model, then write it into the given output stream.
@@ -103,5 +102,5 @@ public interface ObjectFormatter<T> {
*
* @throws IOException
*/
- public T writeOut(Metamodel model, String title, String desc, URI uri, OutputStream out) throws IOException;
+ public T writeOut(Metamodel model, String title, String desc, String uri, OutputStream out) throws IOException;
}
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/ProcessingException.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/ProcessingException.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/ProcessingException.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/ProcessingException.java Mon Jan 17 23:54:05 2011
@@ -89,6 +89,7 @@ public class ProcessingException extends
Document xml = formatter.createXML("Request URI: " + uri, t);
try {
formatter.write(xml, response.getOutputStream());
+ response.sendError(_errorCode);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("Request URI: " + uri, e);
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/PropertiesCommand.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/PropertiesCommand.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/PropertiesCommand.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/PropertiesCommand.java Mon Jan 17 23:54:05 2011
@@ -22,7 +22,6 @@ package org.apache.openjpa.persistence.j
import static org.apache.openjpa.persistence.jest.Constants.*;
import java.io.IOException;
-import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.util.Iterator;
import java.util.Map;
@@ -51,6 +50,7 @@ public class PropertiesCommand extends A
@Override
public void process() throws ProcessingException, IOException {
+ JPAServletContext ctx = getExecutionContext();
HttpServletResponse response = ctx.getResponse();
response.setContentType(MIME_TYPE_XML);
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/QueryCommand.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/QueryCommand.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/QueryCommand.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/QueryCommand.java Mon Jan 17 23:54:05 2011
@@ -26,7 +26,6 @@ import java.util.List;
import java.util.Map;
import static org.apache.openjpa.persistence.jest.Constants.*;
-import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.apache.openjpa.persistence.ArgumentException;
@@ -41,6 +40,11 @@ import static java.net.HttpURLConnection
*
*/
class QueryCommand extends AbstractCommand {
+ private static final String ARG_QUERY = "q";
+ public static final String QUALIFIER_MAXRESULT = "max";
+ public static final String QUALIFIER_FIRSTRESULT = "first";
+ public static final String QUALIFIER_NAMED = "named";
+ public static final String QUALIFIER_SINGLE = "single";
private static final List<String> _mandatoryArgs = Arrays.asList(ARG_QUERY);
private static final List<String> _validQualifiers = Arrays.asList(
QUALIFIER_FORMAT, QUALIFIER_PLAN, QUALIFIER_NAMED, QUALIFIER_SINGLE,
@@ -66,6 +70,7 @@ class QueryCommand extends AbstractComma
@Override
public void process() throws ProcessingException {
+ JPAServletContext ctx = getExecutionContext();
String spec = getMandatoryArgument(ARG_QUERY);
OpenJPAEntityManager em = ctx.getPersistenceContext();
try {
@@ -94,5 +99,4 @@ class QueryCommand extends AbstractComma
popFetchPlan(false);
}
}
-
}
Modified: openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/XMLFormatter.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/XMLFormatter.java?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/XMLFormatter.java (original)
+++ openjpa/trunk/openjpa-jest/src/main/java/org/apache/openjpa/persistence/jest/XMLFormatter.java Mon Jan 17 23:54:05 2011
@@ -19,7 +19,28 @@
package org.apache.openjpa.persistence.jest;
-import static org.apache.openjpa.persistence.jest.Constants.*;
+import static org.apache.openjpa.persistence.jest.Constants.ATTR_ID;
+import static org.apache.openjpa.persistence.jest.Constants.ATTR_KEY_TYPE;
+import static org.apache.openjpa.persistence.jest.Constants.ATTR_MEMBER_TYPE;
+import static org.apache.openjpa.persistence.jest.Constants.ATTR_NAME;
+import static org.apache.openjpa.persistence.jest.Constants.ATTR_NULL;
+import static org.apache.openjpa.persistence.jest.Constants.ATTR_TYPE;
+import static org.apache.openjpa.persistence.jest.Constants.ATTR_VALUE_TYPE;
+import static org.apache.openjpa.persistence.jest.Constants.ATTR_VERSION;
+import static org.apache.openjpa.persistence.jest.Constants.ELEMENT_DESCRIPTION;
+import static org.apache.openjpa.persistence.jest.Constants.ELEMENT_ENTRY;
+import static org.apache.openjpa.persistence.jest.Constants.ELEMENT_ENTRY_KEY;
+import static org.apache.openjpa.persistence.jest.Constants.ELEMENT_ENTRY_VALUE;
+import static org.apache.openjpa.persistence.jest.Constants.ELEMENT_INSTANCE;
+import static org.apache.openjpa.persistence.jest.Constants.ELEMENT_MEMBER;
+import static org.apache.openjpa.persistence.jest.Constants.ELEMENT_NULL_REF;
+import static org.apache.openjpa.persistence.jest.Constants.ELEMENT_REF;
+import static org.apache.openjpa.persistence.jest.Constants.ELEMENT_URI;
+import static org.apache.openjpa.persistence.jest.Constants.JEST_INSTANCE_XSD;
+import static org.apache.openjpa.persistence.jest.Constants.MIME_TYPE_XML;
+import static org.apache.openjpa.persistence.jest.Constants.NULL_VALUE;
+import static org.apache.openjpa.persistence.jest.Constants.ROOT_ELEMENT_INSTANCE;
+import static org.apache.openjpa.persistence.jest.Constants.ROOT_ELEMENT_MODEL;
import java.io.BufferedReader;
import java.io.CharArrayWriter;
@@ -29,15 +50,10 @@ import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
-import java.net.URI;
-import java.net.URLEncoder;
-import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Collection;
-import java.util.Collections;
import java.util.Date;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -47,12 +63,10 @@ import javax.persistence.metamodel.Manag
import javax.persistence.metamodel.MapAttribute;
import javax.persistence.metamodel.Metamodel;
import javax.persistence.metamodel.PluralAttribute;
-import javax.persistence.metamodel.SingularAttribute;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
@@ -64,6 +78,7 @@ import javax.xml.validation.Validator;
import org.apache.openjpa.kernel.OpenJPAStateManager;
import org.apache.openjpa.kernel.StoreContext;
+import org.apache.openjpa.lib.util.Localizer;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.meta.FieldMetaData;
import org.apache.openjpa.meta.JavaTypes;
@@ -88,6 +103,7 @@ public class XMLFormatter implements Obj
private static final DocumentBuilder _builder;
private static final Transformer _transformer;
private static final String EMPTY_TEXT = " ";
+ protected static Localizer _loc = Localizer.forPackage(XMLFormatter.class);
static {
try {
@@ -166,7 +182,7 @@ public class XMLFormatter implements Obj
@Override
public Document writeOut(Collection<OpenJPAStateManager> objs, Metamodel model, String title, String desc,
- URI uri, OutputStream out) throws IOException {
+ String uri, OutputStream out) throws IOException {
Document doc = encode(objs, model);
decorate(doc, title, desc, uri);
write(doc, out);
@@ -174,7 +190,7 @@ public class XMLFormatter implements Obj
}
@Override
- public Document writeOut(Metamodel model, String title, String desc, URI uri, OutputStream out)
+ public Document writeOut(Metamodel model, String title, String desc, String uri, OutputStream out)
throws IOException {
Document doc = encode(model);
decorate(doc, title, desc, uri);
@@ -182,11 +198,11 @@ public class XMLFormatter implements Obj
return doc;
}
- Document decorate(Document doc, String title, String desc, URI uri) {
+ Document decorate(Document doc, String title, String desc, String uri) {
Element root = doc.getDocumentElement();
Element instance = (Element)root.getElementsByTagName(ELEMENT_INSTANCE).item(0);
Element uriElement = doc.createElement(ELEMENT_URI);
- uriElement.setTextContent(uri == null ? NULL_VALUE : uri.toString());
+ uriElement.setTextContent(uri == null ? NULL_VALUE : uri);
Element descElement = doc.createElement(ELEMENT_DESCRIPTION);
descElement.setTextContent(desc == null ? NULL_VALUE : desc);
root.insertBefore(uriElement, instance);
@@ -338,7 +354,7 @@ public class XMLFormatter implements Obj
encodeNull(child);
break;
}
- Set<Map.Entry> entries = ((Map)value).entrySet();
+ Set<Map.Entry<?,?>> entries = ((Map)value).entrySet();
boolean basicKey = fmd.getElement().getTypeMetaData() == null;
boolean basicValue = fmd.getValue().getTypeMetaData() == null;
for (Map.Entry<?,?> e : entries) {
Modified: openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/help/query.html
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/help/query.html?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/help/query.html (original)
+++ openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/help/query.html Mon Jan 17 23:54:05 2011
@@ -27,6 +27,14 @@ Specify a JPQL query or name of a pre-de
Both queries can accept query bind parameters. The type of the parameters are guessed by JEST
from the string you specify in this web form.
<p>
+<b>NOTE:</b> If you use special characters such as '%' in the query, use them as binding parameter value.
+For example, <b>do not</b> use query as<br>
+<tt>select m from Movie m where m.title like '%CHINA%'</tt>
+Instead use<br>
+<tt>select m from Movie m where m.title like :title</tt>
+<br>
+and then set the value of named parameter <tt>title</tt> to <tt>%CHINA%</tt>
+<p>
If using named query, check the Named Query Box.
</body>
</html>
\ No newline at end of file
Modified: openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/jest.js
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/jest.js?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/jest.js (original)
+++ openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/jest.js Mon Jan 17 23:54:05 2011
@@ -281,7 +281,7 @@ function Command_toURI() {
var key = getNodeValue(pair[0]);
var value = getNodeValue(pair[1]);
if (key != null && value != null) {
- args = args.concat(args.length == 0 ? '' : '&').concat(key).concat('=').concat(value);
+ args = args.concat(args.length == 0 ? '' : '&').concat(key).concat('=').concat(escape(value));
}
}
}
Modified: openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/localizer.properties?rev=1060139&r1=1060138&r2=1060139&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/localizer.properties (original)
+++ openjpa/trunk/openjpa-jest/src/main/resources/org/apache/openjpa/persistence/jest/localizer.properties Mon Jan 17 23:54:05 2011
@@ -22,15 +22,16 @@ servlet-init: JEST Servlet is initialize
servlet-not-init: JEST Servlet can not find "{0}" persistence unit during servlet initialization. \
JEST Servlet will try to locate the unit when a request is to be served.
-no-persistence-unit: JEST can not locate the component using persistence unit <b>{0}</b>. This can happen \
- for several reasons: \
- <OL>the component is not initialized. </OL>\
- <OL>the component and JEST servlet do not belong to the same deployment module</OL>\
- <OL>the component did not configure the persistence unit for pooling. To enable pooling, \
- create the persistence unit with configuration property <code>openjpa.EntityManagerFactoryPool=true</code>.<br> \
- The property must be passed to <code>Persistence.createEntityManagerFactory(String unit, Map props)</code> \
- with the second <code>Map</code> argument and <em>not</em> via <code>META-INF/persistence.xml</code></OL>.
+no-persistence-unit: JEST can not locate the component using persistence unit {0}. This can happen \
+ for several reasons: \r\n\
+ a) the component using persistence unit {0} is not initialized. \r\n\
+ b) the component using persistence unit {0} and JEST servlet do not belong to the same deployment module \r\n\
+ c) the component did not configure the persistence unit for pooling. To enable pooling, \
+ create the persistence unit with configuration property openjpa.EntityManagerFactoryPool set to true. \r\n\
+ The property must be passed to Persistence.createEntityManagerFactory(String unit, Map props) \
+ with the Map argument and not via META-INF/persistence.xml.
+no-persistence-unit-standalone: JEST can not create persistence unit {0} in standalone mode.
resource-not-found: Can not locate resource {0}. <br>This can happen for wrong URI syntax. See \
<A href="http://openjpa.apache.org/jest-syntax.html" target="_blank">JEST URI Help page</A> for correct syntax.