Я предполагаю Ваше использование mod_proxy_http (или стабилизатор прокси).
Взгляд в Ваших журналах кота (localhost.log или catalina.log) я подозреваю Ваше наблюдение исключения в Вашем веб-стеке, пузырящемся и закрывающем сокет, с которым подключен рабочий кота.
Я вижу, что вы используете два шаблона. Один из них - шаблон публикации / подписки или наблюдателя , упомянутый Питом. Я думаю, что это, вероятно, то, что вы хотите, но, поскольку в вопросе упоминается привязка метода для последующего выполнения, я подумал, что должен упомянуть шаблон команды .
Шаблон команды в основном является временным решением для тот факт, что java не рассматривает методы (функции) как объекты первого класса, и поэтому их невозможно передать. Вместо этого вы создаете интерфейс, который можно передавать и который инкапсулирует необходимую информацию о том, как вызывать исходный метод.
Так, для вашего примера:
interface Command {
public void execute();
}
, а затем вы передаете экземпляр этой команды при выполнении login ()
функция (не проверено,
Я должен, вероятно, упомянуть, что, хотя это общее объяснение того, как это работает, в Java уже есть кое-что для этой цели, а именно ActionListener
и связанные классы ( actionPerformed ()
в основном это execute ()
в Command
). В основном они предназначены для использования с классами AWT и / или Swing и, следовательно, имеют особенности, специфичные для этого варианта использования.
Идиома, используемая в Java для достижения поведения обратного вызова, - это Listeners. Создайте интерфейс с методами для нужных вам событий, имейте механизм для регистрации объекта слушателя с источником событий. Когда происходит событие, вызовите соответствующий метод для каждого зарегистрированного слушателя. Это общий шаблон для событий AWT и Swing; случайно выбранный пример см. в FocusListener и соответствующий объект FocusEvent .
Обратите внимание, что все события в Java AWT и Swing в конечном итоге наследуются от EventObject , и по соглашению вызывается прослушиватель SomethingListener
и событие SomethingEvent
. Хотя вы можете называть свой код как угодно, проще поддерживать код, который придерживается соглашений платформы.
Насколько мне известно, Java не поддерживает привязку методов или делегатов, как это делает C #.
Возможно, вам придется реализовать это через интерфейсы (например, как прослушиватель команд).
Возможно, вам будет полезен этот веб-сайт:
http://www.javaworld.com/javaworld/javatips/jw-javatip10. html
Вы можете посмотреть swt-сниппеты (посмотрите на слушателей)
http://www.eclipse.org/swt/snippets/
или вы используете класс runnable, перезаписывая метод run своим кодом обратного вызова при создании экземпляра