Social Icons

.

понедельник, 8 июня 2015 г.

Wildfly and Postgresql

Для настройки соединения сервера приложений Wildfly с базой данных Postgresql необходимо внести два раздела в конфигурационный файл сервера приложений standalone.xml

Оба изменения вносятся в раздел <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 на данный момент не особенно заметно.

2 комментария:

  1. public class EQEngineBean {

    @Resource(mappedName = "java:jboss/datasources/PostgreDataSource")
    private DataSource dataSource;

    ОтветитьУдалить
  2. Да, Игорь, Вы правы. Однако я как-то поимел проблем с объявлением ресурса, при работе сервера в кластере (это был не WildFly) и с тех пор люблю lookup.

    ОтветитьУдалить

 

Так говорил Учитель:

У хорошо написанной программы есть свой собственный рай, у плохо написанной — свой собственный ад.

Russian Developer

Взгляд его светел, усилия праведны, старания бесплодны, дело безнадежно ...