2017-09-05 5 views
0

응용 프로그램을 배포 할 때 사용하는 현재 워크 플로는 wildfly에서 JDBC 데이터 소스를 만든 다음 해당 데이터 소스를 persistence.xml 파일에 추가하는 것입니다.persistence.xml을 수정하지 않고 Wildfly에서 배포 된 응용 프로그램의 데이터 소스를 구성하십시오.

persistence.xml을 수정하지 않고 런타임에 응용 프로그램이 사용하는 데이터 소스를 설정할 방법이 있습니까?

이 질문의 핵심은 빌드 타임 및 배포 환경에서 응용 프로그램 간의 결합을 제거하는 방법을 이해하는 것입니다.

답변

0

가장 간단한 솔루션은 데이터 원본을 만든 다음 기본 데이터 원본으로 설정하는 것입니다. 그런 다음 persistence.xml에 데이터 소스를 설정할 필요조차 없습니다.

예를 들어 다음 CLI 명령은 데이터 소스를 만들고 기본 데이터 소스 (java:comp/DefaultDataSource)를 설정합니다.

embed-server 

# Configure the driver 
/subsystem=datasources/jdbc-driver=org.postgresql:add(driver-name=org.postgresql, driver-module-name=org.postgresql, driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource) 

# Configure the data source 
/subsystem=datasources/data-source=postgresql:add(driver-name=org.postgresql, jndi-name="java:/jdbc/PostgresDS", enabled=true, connection-url="jdbc:postgresql://localhost/testdb", user-name=user, password="password") 

# Change the default data source name java:comp/DefaultDataSource 
/subsystem=ee/service=default-bindings:write-attribute(name=datasource, value=java:/jdbc/PostgresDS) 

stop-embedded-server 

그런 다음 persistence.xml에 바로 <jta-data-source> 태그를 제거합니다.

+0

단일 응용 프로그램에서는 작동하지만 프로젝트에서 데이터 원본을 지정하는 것과 비슷한 문제가 발생합니다. 응용 프로그램 및 데이터 원본 이름을 서로 알지 못하게 만들고 응용 프로그램 배포에서 테이블 명명 고려 사항을 제거하려고합니다. 이것은 불행하게도 테이블 명명 충돌을 야기 할 수 있고 또 다른 유형의 단단한 결합을 시행 할 수 있습니다. – KG6ZVP

+0

이것은 좋은 대답은 아니지만 * -ds.xml 배포 설명자를 찾고있을 수 있습니다. https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.4/html/Administration_and_Configuration_Guide/chap-Datasource_Management.html#Deployment_of_-ds.xml_files. 그 문서가 가장 큰 것은 아니지만 https://github.com/wildfly/quickstart/blob/11.x/kitchensink/src/main/webapp/WEB-INF/kitchensink-quickstart-ds에서 예제를 볼 수 있습니다. xml # L22. –

+0

ds 배포는 필자가 피하려고하는 타이트 커플 링에 집착 할뿐만 아니라 추가 배포 복잡성을 초래하기 때문에 더욱 악화됩니다. 나는 지금 내가해야 할 일이 가능한지 아닌지에 관한 문제라고 생각한다. – KG6ZVP