Мне было интересно, есть ли у весны какое-либо решение для поддержки вызова процедуры с использованием конфигурации службы процесса или удаленной службы.Remote/In process service
обновление 1
пример, предположим, что мы имеем следующее:
Общий проект:
public interface ServiceBInterface {
boolean doSomething();
}
Проект А (зависит от общего проекта):
@Service
public class ServiceA {
@Autowired
private ServiceBInterface serviceB;
public void flowA() {
// run flow A code
boolean result = serviceB.doSomething();
// continue run flow A code with result of service B
}
}
Проект B (в зависимости от общих условий кт):
@Service
public class ServiceB implements ServiceBInterface {
public boolean doSomething() {
boolean result = false;
// execute some code
return result;
}
}
я хотел бы иметь возможность настроить ServiceBInterface боб быть инициализированы на следующих вариантах:
- Экземпляр ServiceB
- Экземпляр какой-то объект, который будет сделать RPC для ServiceB, который работает независимо от другого процесса ServiceA.
Ответ Project A (зависит от общего проекта):
@Service
public class ServiceA {
@Autowired
private ServiceBInterface serviceB;
@PostConstruct
public void init() {
if (Boolean.getBoolean("remote")) {
RmiProxyFactoryBean rmiProxyFactoryBean = new RmiProxyFactoryBean();
rmiProxyFactoryBean.setServiceUrl("rmi://localhost:1099/ServiceB");
rmiProxyFactoryBean.setServiceInterface(ServiceBInterface.class);
rmiProxyFactoryBean.setRefreshStubOnConnectFailure(true);
rmiProxyFactoryBean.setLookupStubOnStartup(false);
rmiProxyFactoryBean.afterPropertiesSet();
serviceB = (ServiceBInterface) rmiProxyFactoryBean.getObject();
}
}
public void flowA() {
// run flow A code
boolean result = serviceB.doSomething();
// continue run flow A code with result of service B
}
}
Проект B (зависит от общего проекта):
@Service
public class ServiceB implements ServiceBInterface {
RmiServiceExporter rmiServiceExporte;
@PostConstruct
public void init() throws RemoteException {
if (Boolean.getBoolean("remoteB")) {
rmiServiceExporter = new RmiServiceExporter();
rmiServiceExporter.setServiceName("ServiceB");
rmiServiceExporter.setService(serviceB());
rmiServiceExporter.setServiceInterface(ServiceBInterface.class);
rmiServiceExporter.setServicePort(9999);
rmiServiceExporter.afterPropertiesSet();
}
}
public boolean doSomething() {
boolean result = false;
// execute some code
return result;
}
}
Прочтите справочное руководство, раздел по удалению - это то, что вы хотите, если вы хотите более тщательно использовать поддержку Spring Integration. –