Для настройки соединения сервера приложений Wildfly с базой данных Postgresql необходимо внести два раздела в конфигурационный файл сервера приложений standalone.xml
Оба изменения вносятся в раздел <datasources>. Одно из них настраивает драйвер, другое источник данных jndi. После внесения изменений у меня получилось вот так:
После этого, обращение к базе данных "equeue" можно осуществить следующим образом:
Вообще, стоит отметить, что отличие настроек Wildfly от настроек JBoss на данный момент не особенно заметно.
Оба изменения вносятся в раздел <datasources>. Одно из них настраивает драйвер, другое источник данных jndi. После внесения изменений у меня получилось вот так:
<subsystem xmlns="urn:jboss:domain:datasources:2.0">
<datasources>
<datasource enabled="true" jndi-name="java:jboss/datasources/PostgreDataSource" jta="true" pool-name="PostgreDataSource" use-ccm="true" use-java-context="true">
<connection-url>jdbc:postgresql://localhost:5432/equeue</connection-url>
<driver>postgresql</driver>
<security>
<user-name>postgres</user-name>
<password>password</password>
</security>
</datasource>
<drivers>
<driver module="org.postgres" name="postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
После этого, обращение к базе данных "equeue" можно осуществить следующим образом:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.ejb.Stateless;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class EQEngineBean {
public boolean execute(){
try {
InitialContext theContext = new InitialContext();
String szSourceName = "java:jboss/datasources/PostgreDataSource";
DataSource m_theDataSource = (DataSource) theContext.lookup(szSourceName);
Connection m_theConnection = m_theDataSource.getConnection();
PreparedStatement theStatement = m_theConnection.prepareStatement( "SELECT customer.sz_name FROM public.customer WHERE customer.n_index = 2" );
ResultSet theRecordset = theStatement.executeQuery();
while( theRecordset.next() ){
String szValue = theRecordset.getString(1);
System.out.println("Value is " + szValue);
}
m_theConnection.close();
return true;
}
catch (SQLException e) { e.printStackTrace(); }
catch (NamingException e) { e.printStackTrace(); }
return false;
}
}
Вообще, стоит отметить, что отличие настроек Wildfly от настроек JBoss на данный момент не особенно заметно.
public class EQEngineBean {
ОтветитьУдалить@Resource(mappedName = "java:jboss/datasources/PostgreDataSource")
private DataSource dataSource;
Да, Игорь, Вы правы. Однако я как-то поимел проблем с объявлением ресурса, при работе сервера в кластере (это был не WildFly) и с тех пор люблю lookup.
ОтветитьУдалить