자바를 기반으로 하는 오픈 소스 미들웨어의 총칭이다.
대표적으로 Java EE 스펙을 지원하는 JBoss Application Server가 있고 현재 40개 이상의 다양한 프로젝트가 있으며, JBoss.org 커뮤니티에 의해 개발 및 운영되고 있다.
2014년 11월 20일 레드햇은 기존 JBoss 이름을 WildFly로 변경했다.
경로 : standalone > configuration > standalone.xml
<subsystem xmlns="urn:jboss:domain:datasources:5.0">
<datasources>
<datasource jndi-name="java:jboss/jdbc/postgresql/master" pool-name="postgresqlMasterPool" enabled="true" use-java-context="true">
<connection-url>jdbc:postgresql://localhost:8080/</connection-url>
<driver>postgresql</driver>
<security>
<user-name>root</user-name>
<password>root</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
<background-validation>true</background-validation>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
</validation>
</datasource>
<drivers>
<driver name="postgresql" module="org.postgresql"/>
</drivers>
</datasources>
</subsystem>
standalone.xml에는 datasource와 driver 정보를 세팅한다.
위에서는 jndi-name이 중요하기 때문에 주목해야 한다.
다음으로는 module.xml 파일을 만들어줘야 하는데 처음 Wildfly를 다운받게 되면 파일이 존재하지 않을 것이다. 그렇기 때문에 폴더와 파일을 새로 만들어준다.
<?xml version='1.0' encoding='UTF-8'?>
<module xmlns="urn:jboss:module:1.1" name="org.postgresql">
<resources>
<!--the name of your driver -->
<resource-root path="postgresql-42.3.3.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
resource-root에 main 폴더에 있는 driver를 적어넣고 dependencies에 기본적인 api와 transaction 관련 module을 작성한다.
Wildfly 세팅이 끝났으면 본격적으로 Spring에서 Java 설정 파일을 만들어 연동한다.
DataSourceConfig.java
@Configuration
@MapperScan(value = {"com.example.wildfly.dao.master"}, sqlSessionFactoryRef = "masterSqlSession")
@Slf4j
@EnableTransactionManagement
public class MasterDataSourceConfig {
@Bean
public DataSource masterDataSource() {
JndiDataSourceLookup jdsl = new JndiDataSourceLookup();
jdsl.setResourceRef(true);
DataSource dataSource = jdsl.getDataSource("java:jboss/jdbc/postgresql/master");
return dataSource;
}
@Bean
public SqlSessionFactory masterSqlSession(DataSource masterDataSource) throws Exception {
SqlSessionFactory sqlFactory = null;
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
PathMatchingResourcePatternResolver pmrpr = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setDataSource(masterDataSource);
org.apache.ibatis.session.Configuration conf = new org.apache.ibatis.session.Configuration();
conf.setMapUnderscoreToCamelCase(true);
sqlSessionFactoryBean.setConfiguration(conf);
sqlSessionFactoryBean.setMapperLocations(pmrpr.getResources("classpath:/mapper/master/**/*.xml"));
sqlFactory = sqlSessionFactoryBean.getObject();
return sqlFactory;
}
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(masterDataSource());
}
}
masterDataSource 메소드를 보면 jdsl.getDataSource("java:jboss/jdbc/postgresql/master") 부분이 있는데 위에 standalone.xml에서 세팅한 jndi-name을 적용하면 된다.