aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStraubs, Ralph (rs8887) <rs8887@att.com>2019-10-10 07:48:14 -0500
committerStraubs, Ralph (rs8887) <rs8887@att.com>2019-10-15 06:17:37 -0500
commit33ec206449c190cb6fbd5e9ae186b04c15a5576c (patch)
tree8ca5b79c7d304687ee3694452fc0be02fc0c5518
parent464b0e5f62167900d6cf60f058628dc273cedbf0 (diff)
Add 'PolicySession.insertDrools' method
This change includes feature hooks, so a "smart insert" could forward the object to a remote host, and do the insert there. The methods 'insert' and 'insertAll' in 'PolicyContainer' now make use of this smart insert. Change-Id: I69f0e874b6fda09d1f457e4353e4b30d63696210 Issue-ID: POLICY-2160 Signed-off-by: Straubs, Ralph (rs8887) <rs8887@att.com>
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/core/PolicyContainer.java4
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/core/PolicySession.java23
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/core/PolicySessionFeatureApi.java15
3 files changed, 40 insertions, 2 deletions
diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/PolicyContainer.java b/policy-core/src/main/java/org/onap/policy/drools/core/PolicyContainer.java
index bd97ddb1..4e1b1d6c 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/core/PolicyContainer.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/core/PolicyContainer.java
@@ -489,7 +489,7 @@ public class PolicyContainer implements Startable {
synchronized (sessions) {
PolicySession session = sessions.get(name);
if (session != null) {
- session.getKieSession().insert(object);
+ session.insertDrools(object);
return true;
}
}
@@ -506,7 +506,7 @@ public class PolicyContainer implements Startable {
boolean rval = false;
synchronized (sessions) {
for (PolicySession session : sessions.values()) {
- session.getKieSession().insert(object);
+ session.insertDrools(object);
rval = true;
}
}
diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/PolicySession.java b/policy-core/src/main/java/org/onap/policy/drools/core/PolicySession.java
index 6352eaa2..c2b72fb5 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/core/PolicySession.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/core/PolicySession.java
@@ -232,6 +232,29 @@ public class PolicySession
}
}
+ /**
+ * This method will insert an object into the Drools memory associated
+ * with this 'PolicySession' instance. Features are given the opportunity
+ * to handle the insert, and a distributed host feature could use this to
+ * send the object to another host, and insert it in the corresponding
+ * Drools session.
+ *
+ * @param object the object to insert in Drools memory
+ */
+ public void insertDrools(Object object) {
+ for (PolicySessionFeatureApi feature :
+ PolicySessionFeatureApiConstants.getImpl().getList()) {
+ if (feature.insertDrools(this, object)) {
+ // feature is performing the insert
+ return;
+ }
+ }
+ // no feature has intervened -- do the insert locally
+ if (kieSession != null) {
+ kieSession.insert(object);
+ }
+ }
+
/*=================================*/
/* 'AgendaEventListener' interface */
/*=================================*/
diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/PolicySessionFeatureApi.java b/policy-core/src/main/java/org/onap/policy/drools/core/PolicySessionFeatureApi.java
index dd9ec154..331cebe8 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/core/PolicySessionFeatureApi.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/core/PolicySessionFeatureApi.java
@@ -78,6 +78,21 @@ public interface PolicySessionFeatureApi extends OrderedService {
}
/**
+ * This method is called when 'PolicySession.insertDrools' is called.
+ * In a distributed host environment, features have the ability to send
+ * the object do a different host, and do the insert.
+ *
+ * @param policySession the 'PolicySession' object associated with the
+ * Drools session
+ * @param object the object to insert in Drools memory
+ * @return 'true' if this feature is handling the operation,
+ * and 'false' if not.
+ */
+ public default boolean insertDrools(PolicySession session, Object object) {
+ return false;
+ }
+
+ /**
* This method is called after 'KieSession.dispose()' is called.
*
* @param policySession the 'PolicySession' object that wrapped the