InvokerNodiRuntime.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.pdd.config;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.apache.commons.lang.StringUtils;
- import org.openspcoop2.pdd.core.CostantiPdD;
- import org.openspcoop2.pdd.core.jmx.JMXUtils;
- import org.openspcoop2.utils.UtilsException;
- import org.openspcoop2.utils.transport.TransportUtils;
- import org.openspcoop2.utils.transport.http.HttpRequest;
- import org.openspcoop2.utils.transport.http.HttpRequestMethod;
- import org.openspcoop2.utils.transport.http.HttpResponse;
- import org.openspcoop2.utils.transport.http.HttpUtilities;
- import org.slf4j.Logger;
- /**
- * JmxUtils
- *
- * @author Pintori Giuliano (pintori@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- *
- */
- public class InvokerNodiRuntime {
- private ConfigurazioneNodiRuntime configurazioneNodiRuntime = null;
- private Logger log;
- public InvokerNodiRuntime(Logger log, ConfigurazioneNodiRuntime config) {
- this.log = log;
- this.configurazioneNodiRuntime = config;
- }
-
- public static final String RESOURCE_URL_LOCALE = "locale";
-
- public static final String PREFIX_HTTP_CODE = "[httpCode ";
- private static final String PREFIX_ALIAS = "[alias:";
-
- public boolean isJmxPdD_tipoAccessoOpenSPCoop(String alias) {
- return ConfigurazioneNodiRuntime.RESOURCE_TIPOLOGIA_ACCESSO_OPENSPCOOP.equals(this.configurazioneNodiRuntime.getTipoAccesso(alias))
- ||
- ConfigurazioneNodiRuntime.RESOURCE_TIPOLOGIA_ACCESSO_GOVWAY.equals(this.configurazioneNodiRuntime.getTipoAccesso(alias));
- }
-
- public Object getGestoreRisorseJMX(String alias) throws UtilsException{
- try {
- if(isJmxPdD_tipoAccessoOpenSPCoop(alias)){
- /**System.out.println("=================== REMOTA OPENSPCOOP =======================");*/
- String remoteUrl = this.configurazioneNodiRuntime.getResourceUrl(alias);
- if(remoteUrl==null){
- throw new Exception("Configurazione errata (pdd:"+alias+") accesso via check. Non e' stata indicata la url");
- }
- return remoteUrl;
- }
- else{
- org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay gestoreJMX = null;
-
- if(this.configurazioneNodiRuntime.getResourceUrl(alias)!=null && !"".equals(this.configurazioneNodiRuntime.getResourceUrl(alias))
- && !RESOURCE_URL_LOCALE.equals(this.configurazioneNodiRuntime.getResourceUrl(alias))
- ){
- /**System.out.println("=================== REMOTA =======================");*/
- String remoteUrl = this.configurazioneNodiRuntime.getResourceUrl(alias);
- String factory = this.configurazioneNodiRuntime.getFactory(alias);
- if(factory==null){
- throw new UtilsException("Configurazione errata (pdd:"+alias+") per l'accesso alla url ["+remoteUrl+"] via jmx. Non e' stata indicata una factory");
- }
- String as = this.configurazioneNodiRuntime.getAs(alias);
- if(as==null){
- throw new UtilsException("Configurazione errata (pdd:"+alias+") per l'accesso alla url ["+remoteUrl+"] via jmx. Non e' stato indicato il tipo di application server");
- }
- gestoreJMX = new org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay(as, factory, remoteUrl,
- this.configurazioneNodiRuntime.getUsername(alias),
- this.configurazioneNodiRuntime.getPassword(alias), this.log);
- }
- else{
- /**System.out.println("=================== LOCALE =======================");*/
- gestoreJMX = new org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay(this.log);
-
- }
-
- if(this.log==null) {
- gestoreJMX.setLogActive(false);
- }
-
- return gestoreJMX;
- }
- } catch (Exception e) {
- throw new UtilsException(e.getMessage(),e);
- }
- }
-
- private HttpResponse invokeHttp(String urlWithParameters, String alias, Boolean slowOperation) throws UtilsException {
- String username = this.configurazioneNodiRuntime.getUsername(alias);
- String password = this.configurazioneNodiRuntime.getPassword(alias);
- boolean https = this.configurazioneNodiRuntime.isHttps(alias);
- boolean httpsVerificaHostName = true;
- boolean httpsAutenticazioneServer = true;
- String httpsTruststorePath = null;
- String httpsTruststoreType = null;
- String httpsTruststorePassword = null;
- if(https) {
- httpsVerificaHostName = this.configurazioneNodiRuntime.isHttps_verificaHostName(alias);
- httpsAutenticazioneServer = this.configurazioneNodiRuntime.isHttps_autenticazioneServer(alias);
- if(httpsAutenticazioneServer) {
- httpsTruststorePath = this.configurazioneNodiRuntime.getHttps_autenticazioneServer_truststorePath(alias);
- if(StringUtils.isEmpty(httpsTruststorePath)) {
- throw new UtilsException(PREFIX_ALIAS+alias+"] TLS Truststore path non fornito");
- }
- httpsTruststoreType = this.configurazioneNodiRuntime.getHttps_autenticazioneServer_truststoreType(alias);
- if(StringUtils.isEmpty(httpsTruststoreType)) {
- throw new UtilsException(PREFIX_ALIAS+alias+"] TLS Truststore type non fornito");
- }
- httpsTruststorePassword = this.configurazioneNodiRuntime.getHttps_autenticazioneServer_truststorePassword(alias);
- if(StringUtils.isEmpty(httpsTruststorePassword)) {
- throw new UtilsException(PREFIX_ALIAS+alias+"] TLS Truststore password non fornito");
- }
- }
- }
-
- /**Integer connectionTimeout = HttpUtilities.HTTP_CONNECTION_TIMEOUT;
- Integer readConnectionTimeout = HttpUtilities.HTTP_READ_CONNECTION_TIMEOUT;*/
- // Fix abbasso i tempi di default
- Integer connectionTimeout = 5000;
- Integer readConnectionTimeout = 5000;
- String connectionTimeoutS = this.configurazioneNodiRuntime.getConnectionTimeout(alias);
- if(connectionTimeoutS!=null) {
- connectionTimeout = Integer.valueOf(connectionTimeoutS);
- }
- String readConnectionTimeoutS = this.configurazioneNodiRuntime.getReadConnectionTimeout(alias);
- if(readConnectionTimeoutS!=null) {
- readConnectionTimeout = Integer.valueOf(readConnectionTimeoutS);
- }
- if(slowOperation!=null && slowOperation) {
- String readConnectionTimeoutSlowOperationS = this.configurazioneNodiRuntime.getReadConnectionTimeout_slowOperation(alias);
- if(readConnectionTimeoutSlowOperationS!=null) {
- readConnectionTimeout = Integer.valueOf(readConnectionTimeoutSlowOperationS);
- }
- else {
- readConnectionTimeout = 60000; // default 60 secondi
- }
- }
-
- HttpResponse response = null;
- if(https) {
- HttpRequest httpRequest = new HttpRequest();
- httpRequest.setUrl(urlWithParameters);
- httpRequest.setConnectTimeout(connectionTimeout);
- httpRequest.setReadTimeout(readConnectionTimeout);
- httpRequest.setUsername(username);
- httpRequest.setPassword(password);
- httpRequest.setMethod(HttpRequestMethod.GET);
- httpRequest.setHostnameVerifier(httpsVerificaHostName);
- if(httpsAutenticazioneServer) {
- httpRequest.setTrustStorePath(httpsTruststorePath);
- httpRequest.setTrustStoreType(httpsTruststoreType);
- httpRequest.setTrustStorePassword(httpsTruststorePassword);
- }
- else {
- httpRequest.setTrustAllCerts(true);
- }
- response = HttpUtilities.httpInvoke(httpRequest);
- }
- else {
- response = HttpUtilities.getHTTPResponse(urlWithParameters,
- readConnectionTimeout, connectionTimeout,
- username, password);
- }
- return response;
- }
-
- public String invokeJMXMethod(String alias, String type, String nomeRisorsa, String nomeMetodo) throws UtilsException{
- return invokeJMXMethodEngine(alias, type, nomeRisorsa, nomeMetodo, false);
- }
- public String invokeJMXMethod(String alias, String type, String nomeRisorsa, String nomeMetodo, Boolean slowOperation) throws UtilsException{
- return invokeJMXMethodEngine(alias, type, nomeRisorsa, nomeMetodo, slowOperation);
- }
- public String invokeJMXMethod(String alias, String type, String nomeRisorsa, String nomeMetodo, String parametro) throws UtilsException{
- return invokeJMXMethodEngine(alias, type, nomeRisorsa, nomeMetodo, false,
- (parametro!=null && !"".equals(parametro)) ? parametro : null);
- }
- public String invokeJMXMethod(String alias, String type, String nomeRisorsa, String nomeMetodo, Boolean slowOperation, String parametro) throws UtilsException{
- return invokeJMXMethodEngine(alias, type, nomeRisorsa, nomeMetodo, slowOperation,
- (parametro!=null && !"".equals(parametro)) ? parametro : null);
- }
- public String invokeJMXMethod(String alias, String type, String nomeRisorsa, String nomeMetodo, Object ... parametri ) throws UtilsException{
- return invokeJMXMethodEngine(alias, type, nomeRisorsa, nomeMetodo, false, parametri );
- }
- public String invokeJMXMethod(String alias, String type, String nomeRisorsa, String nomeMetodo, Boolean slowOperation, Object ... parametri ) throws UtilsException{
- return invokeJMXMethodEngine(alias, type, nomeRisorsa, nomeMetodo, slowOperation, parametri );
- }
- private String invokeJMXMethodEngine(String alias, String type, String nomeRisorsa, String nomeMetodo, Boolean slowOperation, Object ... parametri ) throws UtilsException{
-
- Object gestore = this.getGestoreRisorseJMX(alias);
-
- try {
- if(gestore instanceof org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay){
-
- Object [] params = null;
- String [] signatures = null;
- if(parametri!=null && parametri.length>0){
- params = parametri;
- signatures = new String[parametri.length];
- for (int i = 0; i < parametri.length; i++) {
- signatures[i] = parametri[i].getClass().getName();
- }
- }
-
- org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay gestoreJMXGovWay = ((org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay)gestore);
- if(this.log==null) {
- gestoreJMXGovWay.setLogActive(false);
- }
-
- String tmp = (String) gestoreJMXGovWay.invoke(this.configurazioneNodiRuntime.getDominio(alias),
- type, nomeRisorsa, nomeMetodo, params, signatures);
- if(tmp.startsWith(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA)){
- throw new UtilsException(tmp);
- }
- return tmp;
- }
- else if(gestore instanceof String){
- String url = (String) gestore;
-
- Map<String, List<String>> p = new HashMap<>();
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_RESOURCE_NAME, nomeRisorsa);
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_METHOD_NAME, nomeMetodo);
- if(parametri!=null && parametri.length>0){
- for (int i = 0; i < parametri.length; i++) {
- Object o = parametri[i];
- if(o!=null) {
- if(o instanceof Integer) {
- Integer intValue = (Integer) o;
- if(i==0) {
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_INT_VALUE, intValue.intValue()+"");
- }
- else if(i==1) {
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_INT_VALUE_2, intValue.intValue()+"");
- }
- else if(i==2) {
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_INT_VALUE_3, intValue.intValue()+"");
- }
- else {
- throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestisce un numero maggiore di 3 parametri");
- }
- }
- else if(o instanceof Long) {
- Long longValue = (Long) o;
- if(i==0) {
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_LONG_VALUE, longValue.longValue()+"");
- }
- else if(i==1) {
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_LONG_VALUE_2, longValue.longValue()+"");
- }
- else if(i==2) {
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_LONG_VALUE_3, longValue.longValue()+"");
- }
- else {
- throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestisce un numero maggiore di 3 parametri");
- }
- }
- else if(o instanceof Boolean) {
- Boolean booleanValue = (Boolean) o;
- if(i==0) {
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_BOOLEAN_VALUE, booleanValue.booleanValue()+"");
- }
- else if(i==1) {
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_BOOLEAN_VALUE_2, booleanValue.booleanValue()+"");
- }
- else if(i==2) {
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_BOOLEAN_VALUE_3, booleanValue.booleanValue()+"");
- }
- else {
- throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestisce un numero maggiore di 3 parametri");
- }
- }
- else {
- String stringValue = o.toString();
- if(i==0) {
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_VALUE, stringValue);
- }
- else if(i==1) {
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_VALUE_2, stringValue);
- }
- else if(i==2) {
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_VALUE_3, stringValue);
- }
- else {
- throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestisce un numero maggiore di 3 parametri");
- }
- }
- }
- }
- }
-
- String urlWithParameters = TransportUtils.buildUrlWithParameters(p, url);
-
- HttpResponse response = invokeHttp(urlWithParameters, alias, slowOperation);
- if(response.getResultHTTPOperation()!=200){
- String error = PREFIX_HTTP_CODE+response.getResultHTTPOperation()+"]";
- if(response.getContent()!=null){
- error+= " "+new String(response.getContent());
- }
- return error;
- }
- else{
- return new String(response.getContent());
- }
- }
- else {
- throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestito");
- }
- } catch (Exception e) {
- throw new UtilsException(e.getMessage(),e);
- }
- }
-
- public String readJMXAttribute(String alias, String type, String nomeRisorsa, String nomeAttributo) throws UtilsException{
- return readJMXAttribute(alias, type, nomeRisorsa, nomeAttributo, false);
- }
- public String readJMXAttribute(String alias, String type, String nomeRisorsa, String nomeAttributo, Boolean slowOperation) throws UtilsException{
-
- Object gestore = this.getGestoreRisorseJMX(alias);
-
- try {
- if(gestore instanceof org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay){
- org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay gestoreJMXGovWay = ((org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay)gestore);
- if(this.log==null) {
- gestoreJMXGovWay.setLogActive(false);
- }
- Object t = gestoreJMXGovWay.getAttribute(this.configurazioneNodiRuntime.getDominio(alias), type, nomeRisorsa, nomeAttributo);
- if(t instanceof String){
- String tmp = (String) t;
- if(tmp.startsWith(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA)){
- throw new UtilsException(tmp);
- }
- return tmp;
- }
- else if(t instanceof Boolean){
- return ((Boolean)t).toString();
- }
- else{
- return t.toString();
- }
- }
- else if(gestore instanceof String){
- String url = (String) gestore;
-
- Map<String, List<String>> p = new HashMap<>();
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_RESOURCE_NAME, nomeRisorsa);
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_ATTRIBUTE_NAME, nomeAttributo);
- String urlWithParameters = TransportUtils.buildUrlWithParameters(p, url);
-
- HttpResponse response = invokeHttp(urlWithParameters, alias, slowOperation);
- if(response.getResultHTTPOperation()!=200){
- String error = PREFIX_HTTP_CODE+response.getResultHTTPOperation()+"]";
- if(response.getContent()!=null){
- error+= " "+new String(response.getContent());
- }
- return error;
- }
- else{
- return new String(response.getContent());
- }
- }
- else {
- throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestito");
- }
- } catch (Exception e) {
- throw new UtilsException(e.getMessage(),e);
- }
- }
-
- public void setJMXAttribute(String alias, String type, String nomeRisorsa, String nomeAttributo, Object value) throws UtilsException{
- setJMXAttribute(alias, type, nomeRisorsa, nomeAttributo, value, false);
- }
- public void setJMXAttribute(String alias, String type, String nomeRisorsa, String nomeAttributo, Object value, Boolean slowOperation) throws UtilsException{
-
- Object gestore = this.getGestoreRisorseJMX(alias);
-
- try {
- if(gestore instanceof org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay){
- org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay gestoreJMXGovWay = ((org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay)gestore);
- if(this.log==null) {
- gestoreJMXGovWay.setLogActive(false);
- }
- gestoreJMXGovWay.setAttribute(this.configurazioneNodiRuntime.getDominio(alias), type, nomeRisorsa, nomeAttributo, value);
- }
- else if(gestore instanceof String){
- String url = (String) gestore;
-
- Map<String, List<String>> p = new HashMap<>();
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_RESOURCE_NAME, nomeRisorsa);
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_ATTRIBUTE_NAME, nomeAttributo);
- if(value instanceof Boolean){
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_ATTRIBUTE_BOOLEAN_VALUE, value.toString());
- }
- else{
- TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_ATTRIBUTE_VALUE, value.toString());
- }
- String urlWithParameters = TransportUtils.buildUrlWithParameters(p, url);
-
- HttpResponse response = invokeHttp(urlWithParameters, alias, slowOperation);
- if(response.getResultHTTPOperation()!=200){
- String error = PREFIX_HTTP_CODE+response.getResultHTTPOperation()+"]";
- if(response.getContent()!=null){
- error+= " "+new String(response.getContent());
- }
- throw new UtilsException(error);
- }
- }
- else {
- throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestito");
- }
- } catch (Exception e) {
- throw new UtilsException(e.getMessage(),e);
- }
- }
-
- }