В моем текущем проекте я имею дело с EJB, реализующими огромные интерфейсы. Реализация осуществляется через бизнес-делегат, который реализует один и тот же интерфейс и содержит реальный бизнес-код.Java + Command Pattern + Spring + remoting: Как добавить зависимости к объекту Command?
Как полагают некоторые статьи, как
- http://code.google.com/intl/fr/events/io/2009/sessions/GoogleWebToolkitBestPractices.html
- http://www.nofluffjuststuff.com/conference/boston/2008/04/session?id=10150
Последовательность использования этого 'команда' является
- клиент создает команду и параметрирование
- клиента посылает команду на сервер
- сервер команды получить, журнал, аудит и утверждать команды может быть подан
- сервер команды выполнить результат
- сервера возвращение команды для клиента
Проблемы иметь место в Шаг 4 .:
Прямо сейчас я использую контекст spring, чтобы получить bean из контекста внутри команды, , но я хочу, чтобы встраивать зависимости в команду.
Это наивное применение для иллюстрации. Я добавил комментарии, где у меня есть проблемы:
public class SaladCommand implements Command<Salad> {
String request;
public SaladBarCommand(String request) {this.request = request;}
public Salad execute() {
//this server side service is hidden from client, and I want to inject it instead of retrieving it
SaladBarService saladBarService = SpringServerContext.getBean("saladBarService");
Salad salad = saladBarService.prepareSalad(request);
return salad;
}
}
public class SandwichCommand implements Command<Sandwich> {
String request;
public SandwichCommand(String request) {this.request = request;}
public Sandwich execute() {
//this server side service is hidden from client, and I want to inject it instead of retrieving it
SandwichService sandwichService = SpringServerContext.getBean("sandwichService");
Sandwich sandwich = sandwichService.prepareSandwich(request);
return sandwich;
}
}
public class HungryClient {
public static void main(String[] args) {
RestaurantService restaurantService = SpringClientContext.getBean("restaurantService");
Salad salad = restaurantService.execute(new SaladBarCommand(
"chicken, tomato, cheese"
));
eat(salad);
Sandwich sandwich = restaurantService.execute(new SandwichCommand(
"bacon, lettuce, tomato"
));
eat(sandwich);
}
}
public class RestaurantService {
public <T> execute(Command<T> command) {
return command.execute();
}
}
Я хочу, чтобы избавиться от звонков как SandwichService sandwichService = SpringServerContext.getBean("sandwichService");
и моя служба вводится вместо этого.
Как это сделать проще всего?
Эта проблема не имеет ничего общего с EJB, действительно? Похоже, вы просто спрашиваете, как подключаться к весне. Что такое 'SampleCommand'? Кто его создает? Кто его использует? Что это? – skaffman
Я обновил свой вопрос до разъяснения после комментария skaffman. – Guillaume
Если вы когда-либо реализовали что-то для этой проблемы, я бы с удовольствием это услышал. У меня такая же проблема со службами, которые необходимы для выполнения команд, которым не нужно заботиться клиенту. – Jaapjan