From ce3d96a2ef59b63f5a0d360563192915768c9f19 Mon Sep 17 00:00:00 2001 From: hongwei Date: Thu, 16 Nov 2023 09:28:21 +0100 Subject: [PATCH 1/5] refactor/added final to vals --- obp-api/src/main/scala/code/api/constant/constant.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/obp-api/src/main/scala/code/api/constant/constant.scala b/obp-api/src/main/scala/code/api/constant/constant.scala index 7d4794188b..d3016dfa20 100644 --- a/obp-api/src/main/scala/code/api/constant/constant.scala +++ b/obp-api/src/main/scala/code/api/constant/constant.scala @@ -94,9 +94,9 @@ object Constant extends MdcLoggable { final val STATIC_RESOURCE_DOC_CACHE_KEY_PREFIX = "rd_static_" final val ALL_RESOURCE_DOC_CACHE_KEY_PREFIX = "rd_all_" final val STATIC_SWAGGER_DOC_CACHE_KEY_PREFIX = "swagger_static_" - val CREATE_LOCALISED_RESOURCE_DOC_JSON_TTL: Int = APIUtil.getPropsValue(s"createLocalisedResourceDocJson.cache.ttl.seconds", "3600").toInt - val GET_DYNAMIC_RESOURCE_DOCS_TTL: Int = APIUtil.getPropsValue(s"dynamicResourceDocsObp.cache.ttl.seconds", "3600").toInt - val GET_STATIC_RESOURCE_DOCS_TTL: Int = APIUtil.getPropsValue(s"staticResourceDocsObp.cache.ttl.seconds", "3600").toInt + final val CREATE_LOCALISED_RESOURCE_DOC_JSON_TTL: Int = APIUtil.getPropsValue(s"createLocalisedResourceDocJson.cache.ttl.seconds", "3600").toInt + final val GET_DYNAMIC_RESOURCE_DOCS_TTL: Int = APIUtil.getPropsValue(s"dynamicResourceDocsObp.cache.ttl.seconds", "3600").toInt + final val GET_STATIC_RESOURCE_DOCS_TTL: Int = APIUtil.getPropsValue(s"staticResourceDocsObp.cache.ttl.seconds", "3600").toInt } From 2b8811dc4cbbde037ec4fb3c99cb5a247ed0ce80 Mon Sep 17 00:00:00 2001 From: hongwei Date: Thu, 16 Nov 2023 10:23:01 +0100 Subject: [PATCH 2/5] refactor/added the show.dependent.connectors props, and disabled the getDependentMethods as default --- .../src/main/resources/props/sample.props.template | 6 +++++- .../src/main/scala/code/api/constant/constant.scala | 1 + obp-api/src/main/scala/code/api/util/APIUtil.scala | 11 +++++++++-- .../src/main/scala/code/api/util/DynamicUtil.scala | 8 ++++++-- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/obp-api/src/main/resources/props/sample.props.template b/obp-api/src/main/resources/props/sample.props.template index e79ea00329..538b01076b 100644 --- a/obp-api/src/main/resources/props/sample.props.template +++ b/obp-api/src/main/resources/props/sample.props.template @@ -1267,4 +1267,8 @@ show_ip_address_change_warning=false expectedOpenFuturesPerService=100 # Enable /Disable IBAN validation -validate_iban=false \ No newline at end of file +validate_iban=false + +#show all the dependent connector methods for each endpoint, the default value is false. +#If set it to true, it may cost lots of Heap memory. +#show.dependent.connectors=false \ No newline at end of file diff --git a/obp-api/src/main/scala/code/api/constant/constant.scala b/obp-api/src/main/scala/code/api/constant/constant.scala index d3016dfa20..cbd9f412e3 100644 --- a/obp-api/src/main/scala/code/api/constant/constant.scala +++ b/obp-api/src/main/scala/code/api/constant/constant.scala @@ -97,6 +97,7 @@ object Constant extends MdcLoggable { final val CREATE_LOCALISED_RESOURCE_DOC_JSON_TTL: Int = APIUtil.getPropsValue(s"createLocalisedResourceDocJson.cache.ttl.seconds", "3600").toInt final val GET_DYNAMIC_RESOURCE_DOCS_TTL: Int = APIUtil.getPropsValue(s"dynamicResourceDocsObp.cache.ttl.seconds", "3600").toInt final val GET_STATIC_RESOURCE_DOCS_TTL: Int = APIUtil.getPropsValue(s"staticResourceDocsObp.cache.ttl.seconds", "3600").toInt + final val SHOW_DEPENDENT_CONNECTORS: Boolean = APIUtil.getPropsAsBoolValue(s"show.dependent.connectors", false) } diff --git a/obp-api/src/main/scala/code/api/util/APIUtil.scala b/obp-api/src/main/scala/code/api/util/APIUtil.scala index 9a73c6a0b7..95a8aab96c 100644 --- a/obp-api/src/main/scala/code/api/util/APIUtil.scala +++ b/obp-api/src/main/scala/code/api/util/APIUtil.scala @@ -4333,7 +4333,8 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ * NOTE: MEMORY_USER this ctClass will be cached in ClassPool, it may load too many classes into heap. * according class name, method name and method's signature to get all dependent methods */ - def getDependentMethods(className: String, methodName:String, signature: String): List[(String, String, String)] = { + def getDependentMethods(className: String, methodName:String, signature: String): List[(String, String, String)] = + if(SHOW_DEPENDENT_CONNECTORS){ val methods = ListBuffer[(String, String, String)]() //NOTE: MEMORY_USER this ctClass will be cached in ClassPool, it may load too many classes into heap. val ctClass = cp.get(className) @@ -4346,6 +4347,8 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ } }) methods.toList + } else { + Nil } /** @@ -4354,7 +4357,8 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ * @param endpoint can be OBPEndpoint or other PartialFunction * @return a list of connector method name */ - def getDependentConnectorMethods(endpoint: PartialFunction[_, _]): List[String] = { + def getDependentConnectorMethods(endpoint: PartialFunction[_, _]): List[String] = + if (SHOW_DEPENDENT_CONNECTORS){ val connectorTypeName = classOf[Connector].getName val endpointClassName = endpoint.getClass.getName // not analyze dynamic code @@ -4388,6 +4392,9 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ connectorMethods.toList.distinct } + else{ + Nil + } case class EndpointInfo(name: String, version: String) diff --git a/obp-api/src/main/scala/code/api/util/DynamicUtil.scala b/obp-api/src/main/scala/code/api/util/DynamicUtil.scala index 6ee1c6aa55..afb9a0efba 100644 --- a/obp-api/src/main/scala/code/api/util/DynamicUtil.scala +++ b/obp-api/src/main/scala/code/api/util/DynamicUtil.scala @@ -1,5 +1,6 @@ package code.api.util +import code.api.Constant.SHOW_DEPENDENT_CONNECTORS import code.api.{APIFailureNewStyle, JsonResponseException} import code.api.util.ErrorMessages.DynamicResourceDocMethodDependency import code.util.Helper.MdcLoggable @@ -9,10 +10,10 @@ import com.openbankproject.commons.util.{JsonUtils, ReflectUtils} import javassist.{ClassPool, LoaderClassPath} import net.liftweb.common.{Box, Empty, Failure, Full, ParamFailure} import net.liftweb.http.JsonResponse - import net.liftweb.json.{Extraction, JValue, prettyRender} import org.apache.commons.lang3.StringUtils import org.graalvm.polyglot.{Context, Engine, HostAccess, PolyglotAccess} + import java.security.{AccessControlContext, AccessController, CodeSource, Permission, PermissionCollection, Permissions, Policy, PrivilegedAction, ProtectionDomain} import java.util.UUID import java.util.concurrent.ConcurrentHashMap @@ -151,7 +152,8 @@ object DynamicUtil extends MdcLoggable{ * @param predicate * @return */ - def getDynamicCodeDependentMethods(clazz: Class[_], predicate: String => Boolean = _ => true): List[(String, String, String)] = { + def getDynamicCodeDependentMethods(clazz: Class[_], predicate: String => Boolean = _ => true): List[(String, String, String)] = + if (SHOW_DEPENDENT_CONNECTORS) { val className = clazz.getTypeName val listBuffer = new ListBuffer[(String, String, String)]() val classPool = getClassPool(clazz.getClassLoader) @@ -171,6 +173,8 @@ object DynamicUtil extends MdcLoggable{ } listBuffer.distinct.toList + } else { + Nil } trait Sandbox { From 546e9bbee85396c4fce4d6851a7009c23ba6fbac Mon Sep 17 00:00:00 2001 From: hongwei Date: Thu, 16 Nov 2023 10:24:16 +0100 Subject: [PATCH 3/5] docfix/added the show.dependent.connectors to release_notes.md --- release_notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/release_notes.md b/release_notes.md index 45db4d4570..0d7f1c9e99 100644 --- a/release_notes.md +++ b/release_notes.md @@ -3,6 +3,7 @@ ### Most recent changes at top of file ``` Date Commit Action +16/11/2023 2b8811dc Added show.dependent.connectors, default is false. 30/10/2023 4e82c66c Added createLocalisedResourceDocJson.cache.ttl.seconds, default is 3600 13/10/2023 d87c99d8 Added props hikari.connectionTimeout, default is from hikari. Added props hikari.maximumPoolSize, default is from hikari. From 360a175615ec745ac35a47783ed5c227c39748c6 Mon Sep 17 00:00:00 2001 From: hongwei Date: Thu, 16 Nov 2023 10:35:05 +0100 Subject: [PATCH 4/5] refactor/use intern() for string --- obp-api/src/main/scala/code/api/util/APIUtil.scala | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/obp-api/src/main/scala/code/api/util/APIUtil.scala b/obp-api/src/main/scala/code/api/util/APIUtil.scala index 95a8aab96c..7515d7cd15 100644 --- a/obp-api/src/main/scala/code/api/util/APIUtil.scala +++ b/obp-api/src/main/scala/code/api/util/APIUtil.scala @@ -1925,7 +1925,8 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ if (isNeedCheckView) { checkerFunctions += checkViewFun } - val addedMethods: List[String] = checkerFunctions.toList.flatMap(getDependentConnectorMethods(_)).map("obp." +) + val addedMethods: List[String] = checkerFunctions.toList.flatMap(getDependentConnectorMethods(_)) + .map(value =>("obp." +value).intern()) // add connector method to endpoint info addEndpointInfos(addedMethods, partialFunctionName, implementedInApiVersion) @@ -4908,3 +4909,8 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ } + + +object createDependentConnectorMethod extends App{ + +} \ No newline at end of file From 8f31017a4f3cbeafb8c6c7955709a668de362576 Mon Sep 17 00:00:00 2001 From: hongwei Date: Thu, 16 Nov 2023 11:49:30 +0100 Subject: [PATCH 5/5] docfix/tweaked show.dependent.connectors to show_used_connector_methods --- obp-api/src/main/resources/props/sample.props.template | 2 +- obp-api/src/main/scala/code/api/constant/constant.scala | 2 +- obp-api/src/main/scala/code/api/util/APIUtil.scala | 4 ++-- obp-api/src/main/scala/code/api/util/DynamicUtil.scala | 4 ++-- release_notes.md | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/obp-api/src/main/resources/props/sample.props.template b/obp-api/src/main/resources/props/sample.props.template index 538b01076b..0b7ca532a2 100644 --- a/obp-api/src/main/resources/props/sample.props.template +++ b/obp-api/src/main/resources/props/sample.props.template @@ -1271,4 +1271,4 @@ validate_iban=false #show all the dependent connector methods for each endpoint, the default value is false. #If set it to true, it may cost lots of Heap memory. -#show.dependent.connectors=false \ No newline at end of file +#show_used_connector_methods=false \ No newline at end of file diff --git a/obp-api/src/main/scala/code/api/constant/constant.scala b/obp-api/src/main/scala/code/api/constant/constant.scala index cbd9f412e3..bc0163d0a1 100644 --- a/obp-api/src/main/scala/code/api/constant/constant.scala +++ b/obp-api/src/main/scala/code/api/constant/constant.scala @@ -97,7 +97,7 @@ object Constant extends MdcLoggable { final val CREATE_LOCALISED_RESOURCE_DOC_JSON_TTL: Int = APIUtil.getPropsValue(s"createLocalisedResourceDocJson.cache.ttl.seconds", "3600").toInt final val GET_DYNAMIC_RESOURCE_DOCS_TTL: Int = APIUtil.getPropsValue(s"dynamicResourceDocsObp.cache.ttl.seconds", "3600").toInt final val GET_STATIC_RESOURCE_DOCS_TTL: Int = APIUtil.getPropsValue(s"staticResourceDocsObp.cache.ttl.seconds", "3600").toInt - final val SHOW_DEPENDENT_CONNECTORS: Boolean = APIUtil.getPropsAsBoolValue(s"show.dependent.connectors", false) + final val SHOW_USED_CONNECTOR_METHODS: Boolean = APIUtil.getPropsAsBoolValue(s"show_used_connector_methods", false) } diff --git a/obp-api/src/main/scala/code/api/util/APIUtil.scala b/obp-api/src/main/scala/code/api/util/APIUtil.scala index 7515d7cd15..f039e80dcf 100644 --- a/obp-api/src/main/scala/code/api/util/APIUtil.scala +++ b/obp-api/src/main/scala/code/api/util/APIUtil.scala @@ -4335,7 +4335,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ * according class name, method name and method's signature to get all dependent methods */ def getDependentMethods(className: String, methodName:String, signature: String): List[(String, String, String)] = - if(SHOW_DEPENDENT_CONNECTORS){ + if(SHOW_USED_CONNECTOR_METHODS){ val methods = ListBuffer[(String, String, String)]() //NOTE: MEMORY_USER this ctClass will be cached in ClassPool, it may load too many classes into heap. val ctClass = cp.get(className) @@ -4359,7 +4359,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ * @return a list of connector method name */ def getDependentConnectorMethods(endpoint: PartialFunction[_, _]): List[String] = - if (SHOW_DEPENDENT_CONNECTORS){ + if (SHOW_USED_CONNECTOR_METHODS){ val connectorTypeName = classOf[Connector].getName val endpointClassName = endpoint.getClass.getName // not analyze dynamic code diff --git a/obp-api/src/main/scala/code/api/util/DynamicUtil.scala b/obp-api/src/main/scala/code/api/util/DynamicUtil.scala index afb9a0efba..11f8a2874a 100644 --- a/obp-api/src/main/scala/code/api/util/DynamicUtil.scala +++ b/obp-api/src/main/scala/code/api/util/DynamicUtil.scala @@ -1,6 +1,6 @@ package code.api.util -import code.api.Constant.SHOW_DEPENDENT_CONNECTORS +import code.api.Constant.SHOW_USED_CONNECTOR_METHODS import code.api.{APIFailureNewStyle, JsonResponseException} import code.api.util.ErrorMessages.DynamicResourceDocMethodDependency import code.util.Helper.MdcLoggable @@ -153,7 +153,7 @@ object DynamicUtil extends MdcLoggable{ * @return */ def getDynamicCodeDependentMethods(clazz: Class[_], predicate: String => Boolean = _ => true): List[(String, String, String)] = - if (SHOW_DEPENDENT_CONNECTORS) { + if (SHOW_USED_CONNECTOR_METHODS) { val className = clazz.getTypeName val listBuffer = new ListBuffer[(String, String, String)]() val classPool = getClassPool(clazz.getClassLoader) diff --git a/release_notes.md b/release_notes.md index 0d7f1c9e99..489530bf20 100644 --- a/release_notes.md +++ b/release_notes.md @@ -3,7 +3,7 @@ ### Most recent changes at top of file ``` Date Commit Action -16/11/2023 2b8811dc Added show.dependent.connectors, default is false. +16/11/2023 2b8811dc Added show_used_connector_methods, default is false. 30/10/2023 4e82c66c Added createLocalisedResourceDocJson.cache.ttl.seconds, default is 3600 13/10/2023 d87c99d8 Added props hikari.connectionTimeout, default is from hikari. Added props hikari.maximumPoolSize, default is from hikari.