diff options
author | 2017-08-03 17:27:34 -0400 | |
---|---|---|
committer | 2017-08-03 17:27:34 -0400 | |
commit | 43854a9e3310ff7a92257d16c4fc0a8321eaec68 (patch) | |
tree | 46af936c5da4f9c60d7d63dade5c61a8fd5ef9f4 /authz-cass/src/main/java/com/att/dao/session/SessionFilter.java | |
parent | f691a8b8dfc9eea4c6b3bfa45ea60f07ad347e69 (diff) |
[AAF-21] Initial code import
Change-Id: I63d7d499bbd46f500b5f5a4db966166f613f327a
Signed-off-by: sg481n <sg481n@att.com>
Diffstat (limited to 'authz-cass/src/main/java/com/att/dao/session/SessionFilter.java')
-rw-r--r-- | authz-cass/src/main/java/com/att/dao/session/SessionFilter.java | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/authz-cass/src/main/java/com/att/dao/session/SessionFilter.java b/authz-cass/src/main/java/com/att/dao/session/SessionFilter.java new file mode 100644 index 00000000..6f835194 --- /dev/null +++ b/authz-cass/src/main/java/com/att/dao/session/SessionFilter.java @@ -0,0 +1,142 @@ +/*******************************************************************************
+ * ============LICENSE_START====================================================
+ * * org.onap.aai
+ * * ===========================================================================
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * * Copyright © 2017 Amdocs
+ * * ===========================================================================
+ * * Licensed under the Apache License, Version 2.0 (the "License");
+ * * you may not use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License.
+ * * ============LICENSE_END====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+package com.att.dao.session;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import com.att.cssa.rserv.TransFilter;
+import com.att.inno.env.APIException;
+import com.att.inno.env.Env;
+import com.att.inno.env.EnvStore;
+import com.att.inno.env.Slot;
+import com.att.inno.env.TransStore;
+import com.att.inno.env.util.Pool;
+import com.att.inno.env.util.Pool.Creator;
+import com.att.inno.env.util.Pool.Pooled;
+import com.datastax.driver.core.Cluster;
+import com.datastax.driver.core.Session;
+
+public class SessionFilter<TRANS extends TransStore> implements Filter {
+ public static final String SESSION_SLOT = "__SESSION__";
+ private static Slot sessionSlot;
+ private static Pool<Session> pool;
+
+ public SessionFilter(EnvStore<?> env, Cluster cluster, String keyspace) {
+ synchronized(env) {
+ if(sessionSlot==null) {
+ sessionSlot = env.slot(SESSION_SLOT);
+ }
+ if(pool==null) {
+ pool = new Pool<Session>(new SessionCreator(env,cluster,keyspace));
+ }
+ }
+ }
+
+ @Override
+ public void init(FilterConfig fc) throws ServletException {
+ // Session does not need any sort of configuration from Filter
+ }
+
+ @Override
+ public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
+ @SuppressWarnings("unchecked")
+ TRANS trans = (TRANS)req.getAttribute(TransFilter.TRANS_TAG);
+ try {
+ Pooled<Session> psess = pool.get();
+ try {
+ trans.put(sessionSlot, psess.content);
+ chain.doFilter(req, resp);
+ } finally {
+ psess.done();
+ }
+ } catch (APIException e) {
+ throw new ServletException(e);
+ }
+ }
+
+ public Pooled<Session> load(TRANS trans) throws APIException {
+ Pooled<Session> psess = pool.get();
+ trans.put(sessionSlot, psess.content);
+ return psess;
+ }
+
+
+ /**
+ * Clear will drain the pool, so that new Sessions will be constructed.
+ *
+ * Suitable for Management calls.
+ */
+ public static void clear() {
+ if(pool!=null) {
+ pool.drain();
+ }
+ }
+
+ @Override
+ public void destroy() {
+ pool.drain();
+ }
+
+ private class SessionCreator implements Creator<Session> {
+ private Cluster cluster;
+ private String keyspace;
+ private Env env;
+
+ public SessionCreator(Env env, Cluster cluster, String keyspace) {
+ this.cluster = cluster;
+ this.keyspace = keyspace;
+ this.env = env;
+ }
+
+ @Override
+ public Session create() throws APIException {
+ env.info().log("Creating a Cassandra Session");
+ return cluster.connect(keyspace);
+ }
+
+ @Override
+ public void destroy(Session t) {
+ env.info().log("Shutting down a Cassandra Session");
+ t.close();
+ }
+
+ @Override
+ public boolean isValid(Session t) {
+ return true;
+ }
+
+ @Override
+ public void reuse(Session t) {
+ // Nothing is needed to reuse this Session
+ }
+
+ }
+}
|