2016-09-23 3 views
0

я реализовал плагин инфраструктуру, где у меня есть:Performance с URLClassLoader с банкой файлами

а> война файл: Эта война файл имеет класс, который загружает файл банка динамически из файловой системы.

b> Файл Jar: они размещаются в файловой системе, которая будет использована военным файлом выше.

Я беспокоюсь, что файл jar будет вызываться много в день. Является ли мой дизайн правильным или есть возможности для улучшения? Как это повлияет на производительность военного файла?

War класс контроллера файла:

public class PluginController { 

/** 
* This method is used to invoke plugin class dynamically 
* @param requestBean : This object contains all parameter to 
* complete the request 
* @return responseBean : This object contains the response from vendor 
*/ 
public ResponseBean invokePlugin(RequestBean requestBean){ 
    URLClassLoader urlClassLoader = null; 
    ResponseBean responseBean = null; 
    Map<String, String> parameters = marshalRequest(requestBean); 
    try { 
     urlClassLoader = new URLClassLoader(new URL[]{new URL("file:///C:/Users/jamju02/Desktop/today/otp.jar")}); 
     if(urlClassLoader != null){ 
      Class pluiginClass = urlClassLoader.loadClass("com.ca.pas.plugin.bean.PluginTest"); 

      if(pluiginClass != null){ 
       // Create a new instance from the loaded class 
       Constructor<?> constructor = pluiginClass.getConstructor(); 

       Object classobject = constructor.newInstance(); 
        Method method = pluiginClass.getDeclaredMethod("sendOTP", Map.class); 
        method.setAccessible(true); 
        responseBean = (ResponseBean) method.invoke(classobject, parameters); 
      }else{ 
       System.out.println("class file name not found in jar file"); 
      } 

     }else{ 

     } 



    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (InstantiationException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (NoSuchMethodException e) { 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    }finally{ 
     try { 
      if(urlClassLoader != null){ 
       urlClassLoader.close(); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return responseBean; 
} 


public Map<String, String> marshalRequest(RequestBean requestBean){ 

    Map<String, String> parameters = new HashMap<>(); 
    parameters.put("TXN_ID", requestBean.getTxnId()); 
    parameters.put("BANK_ID", requestBean.getBankId()); 
    parameters.put("RANGE_ID", requestBean.getRangeId()); 
    parameters.put("CARD_NUMBER", requestBean.getCardNumber()); 
    parameters.put("CARDHOLDER_NAME", requestBean.getCardholderName()); 
    parameters.put("OTP", requestBean.getOrb().getOtp()); 
    parameters.put("MOBILE_NUMBER", requestBean.getOrb().getMobileNumber()); 
    parameters.put("EMAIL", requestBean.getOrb().getEmailAddress()); 
    return parameters; 
} 

} 

================================== =============================================

Класс Jar-файла имеет некоторый контент для вызова веб-службы.

+0

Подсказка: если вы ищете обзор рабочего кода, рассмотрите возможность обращения к codereview.stackexchange.com ... – GhostCat

ответ

0

выглядит хорошо для меня.

Я не вижу весь дизайн системы, но это было бы быстрее, если бы вы могли сохранить экземпляр classloader в переменной object/class. Возможно, можно было бы разработать класс контроллера a singleton.

с помощью базового конструктора без каких-либо параметров, тогда достаточно просто использовать pluinClass.newInstance() без конструктора. Обратите внимание, что вам не нужно использовать setAccessible(true), если вызванный метод определяется как открытый.

 Смежные вопросы

  • Нет связанных вопросов^_^