Используйте дополнительный JNDI с Spring Boot - PullRequest
0 голосов
/ 14 марта 2019

У меня есть приложение для предприятия, настроенное для работы с JNDI. Вот конфигурация у меня application.properties.

spring.datasource.jndi-name=jdbc/MYPRIMARYDATABASE
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
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
spring.jackson.serialization-inclusion=NON_NULL

и моя весна главная: Application.java

@SpringBootApplication
@EnableScheduling
@EnableJpaRepositories(basePackages = { "it.mypackage.data.access.database" })
@EntityScan(basePackages = { "it.mypackage.data.access.model" })
@ComponentScan(basePackages = { "it.mypackage" })
public class Application extends SpringBootServletInitializer implements WebApplicationInitializer {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
    @Bean
    public SessionFactory sessionFactory(@Qualifier("entityManagerFactory") EntityManagerFactory emf) {

        return emf.unwrap(SessionFactory.class);
    }

}

Внутри пакета it.mypackage.data.access.database есть интерфейс DAO и фасад DAO, которые выполняют операции с источником данных и в пакете it.mypackage.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);
    }
    .
    .
}

Здесь у меня есть новый объект , который должен использовать дополнительный JNDI

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;
    .
    .
    .
}

Есть ли чистый способ добавить второй JNDI и настроить Photo.java на использование нового?

...