У меня есть приложение, которое отлично работает с одним JNDI, но теперь мне нужно добавить второе только для одного объекта. Вот мой application.properties
#Datasources
spring.datasource.primary.jndi-name=jdbc/DS1
spring.datasource.primary.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.secondary.jndi-name=jdbc/DS2
spring.datasource.secondary.driver-class-name=oracle.jdbc.OracleDriver
#Hibernate
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.jpa.properties.hibernate.current_session_context_class=jta
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.properties.hibernate.transaction.factory_class=org.hibernate.transaction.JTATransactionFactory
#Jackson properties
spring.jackson.serialization-inclusion=NON_NULL
и моя весна главная: ScApplication.java
@SpringBootApplication
@EnableScheduling
@EnableJpaRepositories(basePackages = { "it.pippo.data.access.database" })
@EntityScan(basePackages = { "it.pippo.data.access.model" })
@ComponentScan(basePackages = { "it.pippo" })
public class ScApplication extends SpringBootServletInitializer implements WebApplicationInitializer {
public static void main(String[] args) {
SpringApplication.run(ScApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ScApplication.class);
}
@Bean
public SessionFactory sessionFactory(@Qualifier("entityManagerFactory") EntityManagerFactory emf) {
return emf.unwrap(SessionFactory.class);
}
}
Внутри пакета it.pippo.data.access.database
У меня есть интерфейс DAO и фасад DAO, который я использую для выполнения операций с источником данных, а в пакете it.pippo.data.access.model
у меня есть все сущности моей таблицы.
DatabaseDAOFacade.java
@Repository
@Transactional
public class DatabaseDAOFacade implements DatabaseDAOInterface {
private final SessionFactory sf;
@SuppressWarnings("unused")
private EntityManager entityManager;
protected Session getSession() {
return sf.getCurrentSession();
}
@Autowired
public DatabaseDAOFacade(SessionFactory sf, EntityManager entityManager) {
this.sf = sf;
this.entityManager = entityManager;
}
@SuppressWarnings("unchecked")
public <T> T save(T o) {
return (T) this.getSession().save(o);
}
.
.
}
Photo.java
@Entity
@Table(name = "T_PHOTO")
public class Photo {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "PHOTO_REQUEST_SEQ_GEN")
@SequenceGenerator(name = "PHOTO_REQUEST_SEQ_GEN", sequenceName = "PHOTO_REQUESTS")
private Long id;
@Column(name = "USERID")
private String userId;
@Column(name = "UPLOAD_DATE")
private Date uploadDate;
.
.
.
}
Как я могу указать приложению искать объект Photo во втором JNDI, а не в первом?
Я уже перепробовал много разных предложений, но ни одно из них не помогло мне. Кроме того, я не могу слишком сильно изменить структуру приложения.