我想使用Jersey / Spring实现一个RESTful Web服务,它根据请求所针对的主机名在应用程序上下文之间切换(类似于虚拟主机)。
例如,对site1.domain.com和site2.domain.com的请求应该具有与不同数据库,用户等一起使用的不同服务bean集。
最好的方法是什么?
编辑:应用程序上下文应该具有相同的bean类。不同之处在于使用的数据库。它们也必须是动态的,即在应用程序运行时定义/销毁。
很高兴知道Spring是否可以实现这一点,以及搜索的起点是什么。我发现的大部分信息都与webapp init期间的静态配置有关。
答案 0 :(得分:0)
您需要根据请求使用Custom Spring bean作用域来管理具有多个单元的多个EMF / SessionFactory。
@Scope("dynamic")
@Bean(name ="erpEMF")
public LocalContainerEntityManagerFactoryBean erpManagerFactory() {
LocalContainerEntityManagerFactoryBean emf = buildEmf();
return emf;
}
@Scope("dynamic")
@Bean(name ="erpJPA")
public JpaTransactionManager erpTransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setPersistenceUnitName("erpUnit");
return transactionManager;
}
@Scope("dynamic")
@Bean(name ="erpDataSource", destroyMethod=EmfHolder.DataSourceCloseMethod)
public DataSource erpDataSource() {
return dynamicDataSource( DB_NAMES.AGI_ERP );
}
public class DynamicScope implements Scope{
public Object get(String name, ObjectFactory<?> objectFactory) {
//return Service depending on your request
}
}
@Scope("dynamic")
@Service
public class ActAccountService extends ErpGenericService<ActAccount> implements IActAccountService {
@Transactional("erpJPA")
public Account create(Account t){
}
}