/** * TelegramListenerのクラスをJavelin設定から読み込み、登録する。 クラスのロードは、以下の順でクラスローダでのロードを試みる。 * * <ol> * <li>JavelinClientThreadをロードしたクラスローダ * <li>コンテキストクラスローダ * </ol> * * @param listeners 利用するTelegramListener名 */ private void registerTelegramListeners(final String[] listeners) { String key = ""; String message = ""; for (String listenerName : listeners) { try { if ("".equals(listenerName)) { continue; } Class<?> listenerClass = loadClass(listenerName); Object listener = listenerClass.newInstance(); if (listener instanceof TelegramListener) { addTelegramListener((TelegramListener) listener); key = "javelin.communicate.JavelinClientThread.regist"; message = CommunicatorMessages.getMessage(key, listenerName); SystemLogger.getInstance().info(message); } else { key = "javelin.communicate.JavelinClientThread.notImplement"; message = CommunicatorMessages.getMessage(key, listenerName); SystemLogger.getInstance().info(message); } } catch (Exception ex) { key = "javelin.communicate.JavelinClientThread.registError"; message = CommunicatorMessages.getMessage(key, listenerName); SystemLogger.getInstance().warn(message, ex); } } }
/** * クラスをロードする。 以下の順でクラスローダでのロードを試みる。 * * <ol> * <li>JavelinClientThreadをロードしたクラスローダ * <li>コンテキストクラスローダ * </ol> * * @param className ロードするクラスの名前。 * @return ロードしたクラス。 * @throws ClassNotFoundException 全てのクラスローダでクラスが見つからない場合 */ private Class<?> loadClass(final String className) throws ClassNotFoundException { Class<?> clazz; try { clazz = Class.forName(className); } catch (ClassNotFoundException cnfe) { String key = "javelin.communicate.JavelinClientThread.loadError"; String message = CommunicatorMessages.getMessage(key, className); SystemLogger.getInstance().info(message); clazz = Thread.currentThread().getContextClassLoader().loadClass(className); } return clazz; }