+++ /dev/null
-/*******************************************************************************\r
- * ============LICENSE_START====================================================\r
- * * org.onap.aaf\r
- * * ===========================================================================\r
- * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
- * * ===========================================================================\r
- * * Licensed under the Apache License, Version 2.0 (the "License");\r
- * * you may not use this file except in compliance with the License.\r
- * * You may obtain a copy of the License at\r
- * * \r
- * * http://www.apache.org/licenses/LICENSE-2.0\r
- * * \r
- * * Unless required by applicable law or agreed to in writing, software\r
- * * distributed under the License is distributed on an "AS IS" BASIS,\r
- * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * * See the License for the specific language governing permissions and\r
- * * limitations under the License.\r
- * * ============LICENSE_END====================================================\r
- * *\r
- * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
- * *\r
- ******************************************************************************/\r
-package org.onap.aaf.dao.session;\r
-\r
-import java.io.IOException;\r
-\r
-import javax.servlet.Filter;\r
-import javax.servlet.FilterChain;\r
-import javax.servlet.FilterConfig;\r
-import javax.servlet.ServletException;\r
-import javax.servlet.ServletRequest;\r
-import javax.servlet.ServletResponse;\r
-\r
-import org.onap.aaf.cssa.rserv.TransFilter;\r
-\r
-import org.onap.aaf.inno.env.APIException;\r
-import org.onap.aaf.inno.env.Env;\r
-import org.onap.aaf.inno.env.EnvStore;\r
-import org.onap.aaf.inno.env.Slot;\r
-import org.onap.aaf.inno.env.TransStore;\r
-import org.onap.aaf.inno.env.util.Pool;\r
-import org.onap.aaf.inno.env.util.Pool.Creator;\r
-import org.onap.aaf.inno.env.util.Pool.Pooled;\r
-import com.datastax.driver.core.Cluster;\r
-import com.datastax.driver.core.Session;\r
-\r
-public class SessionFilter<TRANS extends TransStore> implements Filter {\r
- public static final String SESSION_SLOT = "__SESSION__";\r
- private static Slot sessionSlot;\r
- private static Pool<Session> pool;\r
-\r
- public SessionFilter(EnvStore<?> env, Cluster cluster, String keyspace) {\r
- synchronized(env) {\r
- if(sessionSlot==null) {\r
- sessionSlot = env.slot(SESSION_SLOT);\r
- }\r
- if(pool==null) {\r
- pool = new Pool<Session>(new SessionCreator(env,cluster,keyspace));\r
- }\r
- }\r
- }\r
-\r
- @Override\r
- public void init(FilterConfig fc) throws ServletException {\r
- // Session does not need any sort of configuration from Filter\r
- }\r
-\r
- @Override\r
- public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {\r
- @SuppressWarnings("unchecked")\r
- TRANS trans = (TRANS)req.getAttribute(TransFilter.TRANS_TAG);\r
- try {\r
- Pooled<Session> psess = pool.get();\r
- try {\r
- trans.put(sessionSlot, psess.content);\r
- chain.doFilter(req, resp);\r
- } finally {\r
- psess.done();\r
- }\r
- } catch (APIException e) {\r
- throw new ServletException(e);\r
- }\r
- }\r
-\r
- public Pooled<Session> load(TRANS trans) throws APIException {\r
- Pooled<Session> psess = pool.get();\r
- trans.put(sessionSlot, psess.content);\r
- return psess;\r
- }\r
- \r
- \r
- /**\r
- * Clear will drain the pool, so that new Sessions will be constructed.\r
- * \r
- * Suitable for Management calls. \r
- */\r
- public static void clear() {\r
- if(pool!=null) {\r
- pool.drain();\r
- } \r
- }\r
- \r
- @Override\r
- public void destroy() {\r
- pool.drain();\r
- }\r
-\r
- private class SessionCreator implements Creator<Session> {\r
- private Cluster cluster;\r
- private String keyspace;\r
- private Env env;\r
- \r
- public SessionCreator(Env env, Cluster cluster, String keyspace) {\r
- this.cluster = cluster;\r
- this.keyspace = keyspace;\r
- this.env = env;\r
- }\r
- \r
- @Override\r
- public Session create() throws APIException {\r
- env.info().log("Creating a Cassandra Session");\r
- return cluster.connect(keyspace);\r
- }\r
-\r
- @Override\r
- public void destroy(Session t) {\r
- env.info().log("Shutting down a Cassandra Session");\r
- t.close();\r
- }\r
-\r
- @Override\r
- public boolean isValid(Session t) {\r
- return true;\r
- }\r
-\r
- @Override\r
- public void reuse(Session t) {\r
- // Nothing is needed to reuse this Session\r
- }\r
- \r
- }\r
-}\r