Recreating resources from routes on restart.
git-svn-id: https://svn.apache.org/repos/asf/ode/branches/restful@758875 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/rapi/ProcessModel.java b/bpel-api/src/main/java/org/apache/ode/bpel/rapi/ProcessModel.java
index 7addf97..5b63672 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/rapi/ProcessModel.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/rapi/ProcessModel.java
@@ -24,4 +24,6 @@
ActivityModel getChild(final int id);
int getModelVersion();
+
+ byte[] getGlobalState();
}
diff --git a/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java b/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java
index cb188dc..8dfc11b 100644
--- a/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java
+++ b/bpel-dao/src/main/java/org/apache/ode/bpel/dao/BpelDAOConnection.java
@@ -123,4 +123,8 @@
void deleteResourceRoute(String url, String method);
+ /**
+ * Potentially loads a lot of (small) records, handle with care.
+ */
+ List<ResourceRouteDAO> getAllResourceRoutes();
}
diff --git a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
index 2b3dc39..797a75f 100644
--- a/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
+++ b/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionImpl.java
@@ -102,6 +102,14 @@
.setString("url", url).setString("method", method).executeUpdate();
}
+ public List<ResourceRouteDAO> getAllResourceRoutes() {
+ List<HResourceRoute> hrr = _session.createCriteria(HResourceRoute.class).list();
+ ArrayList<ResourceRouteDAO> rr = new ArrayList<ResourceRouteDAO>(hrr.size());
+ for (HResourceRoute hroute : hrr)
+ rr.add(new ResourceRouteDaoImpl(_sm, hroute));
+ return rr;
+ }
+
public ProcessDAO createProcess(QName pid, QName type, String guid, long version) {
HProcess process = new HProcess();
process.setProcessId(pid.toString());
diff --git a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
index c5d9151..9fa7347 100644
--- a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
+++ b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
@@ -307,6 +307,10 @@
return m;
}
+ public List<ResourceRouteDAO> getAllResourceRoutes() {
+ return _em.createQuery("select r from ResourceRouteDAOImpl r").getResultList();
+ }
+
public void deleteResourceRoute(String url, String method) {
_em.createQuery("delete from ResourceRouteDAOImpl r where r._url = ?1 and r._method = ?2")
.setParameter(1, url).setParameter(2, method).executeUpdate();
diff --git a/engine/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java b/engine/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
index cc42395..1a16464 100644
--- a/engine/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
+++ b/engine/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
@@ -343,7 +343,7 @@
ODEProcess process;
if (conf.isRestful()) {
ODERESTProcess restProcess = new ODERESTProcess(this, conf, null, _incomingMexCache);
- for (String resUrl : restProcess.getInitialResourceUrls()) {
+ for (String resUrl : restProcess.initResources()) {
_restServiceMap.put(resUrl, restProcess);
}
process = restProcess;
diff --git a/engine/src/main/java/org/apache/ode/bpel/engine/ODERESTProcess.java b/engine/src/main/java/org/apache/ode/bpel/engine/ODERESTProcess.java
index 790e39a..02a4a92 100644
--- a/engine/src/main/java/org/apache/ode/bpel/engine/ODERESTProcess.java
+++ b/engine/src/main/java/org/apache/ode/bpel/engine/ODERESTProcess.java
@@ -12,6 +12,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
+import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Callable;
@@ -28,7 +29,7 @@
_runtime.init(_pconf, _processModel);
}
- public Collection<String> getInitialResourceUrls() {
+ public Collection<String> initResources() {
if (_staticResources.size() > 0 ) return _staticResources.values();
// Caching instantiating resource urls as those can be expressions
@@ -49,6 +50,26 @@
void activate() {
bounceProcessDAO();
+ // Resources to activate are the instantiating ones plus the waiting routes.
+
+ List<ResourceRouteDAO> rrDaos;
+ try {
+ rrDaos = _contexts.execTransaction(new Callable<List<ResourceRouteDAO>>() {
+ public List<ResourceRouteDAO> call() throws Exception {
+ return _contexts.dao.getConnection().getAllResourceRoutes();
+ }
+ });
+ } catch (Exception ex) {
+ String errmsg = "DbError";
+ __log.error(errmsg, ex);
+ throw new BpelEngineException(errmsg, ex);
+ }
+
+ for (ResourceRouteDAO rrDao : rrDaos) {
+ Resource resource = new Resource(rrDao.getUrl(), "application/xml", rrDao.getMethod());
+ _contexts.bindingContext.activateProvidedResource(resource);
+ _instantiatingResources.add(resource);
+ }
// Activating instantiating resources
for (ResourceModel resourceModel : _staticResources.keySet()) {
diff --git a/engine/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java b/engine/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
index 5c5dfcc..8e95989 100644
--- a/engine/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
+++ b/engine/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
@@ -239,6 +239,10 @@
_resRouteStore.remove(url+"~"+method);
}
+ public List<ResourceRouteDAO> getAllResourceRoutes() {
+ return new ArrayList<ResourceRouteDAO>(_resRouteStore.values());
+ }
+
public void addResourceRoute(ResourceRouteDAOImpl rroute) {
_resRouteStore.put(rroute.getUrl()+"~"+rroute.getMethod(), rroute);
}
diff --git a/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/OProcess.java b/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/OProcess.java
index 12734f3..ce5a980 100644
--- a/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/OProcess.java
+++ b/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/OProcess.java
@@ -217,4 +217,8 @@
public Collection<? extends ResourceModel> getProvidedResources() {
return null;
}
+
+ public byte[] getGlobalState() {
+ return null;
+ }
}
diff --git a/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/OProcess.java b/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/OProcess.java
index 0980c69..198b38e 100644
--- a/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/OProcess.java
+++ b/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/OProcess.java
@@ -242,4 +242,8 @@
public int getModelVersion() {
return 2;
}
+
+ public byte[] getGlobalState() {
+ return globalState;
+ }
}