2.3.2. fejezet, Adatforrások

JDBC DataSource objektumokkal kialakítható connection pool hasznos több szálú alkalmazások készítésekor.

JNDI erőforrásból előállított JDBC kapcsolatra egy példa:

    public Connection getConnectionFromPool(){
		Connection result = null;
		try {
	        InitialContext ctx = new InitialContext();
	        Context envContext  = (Context)ctx.lookup("java:/comp/env");
	        DataSource ds = (DataSource)envContext.lookup("jdbc/"+getName());
	        result = ds.getConnection();
        } catch (NamingException e) {
	        e.printStackTrace();
        }catch (SQLException e) {
	        e.printStackTrace();
        }
        return result;
    }

ahol a getName metódus a JDBC kapcsolat nevét adja vissza. Ha a demand nevű adatbázist szeretnénk elérni, akkor hozzuk létre a context.xml fájlt a projekt META-INF könyvtárba a következő tartalommal:

<Context debug="5" reloadable="true" crossContext="true">
  <Resource name="jdbc/demand" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="username" password="password" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/demand">
               	<parameter>
               		<name>autoReconnect</name>
			<value>true</value>
               	</parameter>
  </Resource>
</Context>

A web.xml fájlba szerkesszük a resource-ref tagot:

<web-app ... >
...
  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/demand</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Shareable</res-sharing-scope>
  </resource-ref>
...
</web-app>

Adatforrás lehet egy fájl is. Ilyenek a .properties végződésű fájlok. Olyanok, mint az .ini fájlok, csoportok nélkül.

Paraméterek

String UserDirectoryHeader = "${user}=${password}";
String UserDirectoryFile = "resources/users.properties";

Betöltés

java.io.InputStream i = null;
Properties p = null;
i = this.getClass().getClassLoader().
getResourceAsStream(UserDirectoryFile);
 
try {
  p = new Properties();
  p.load(i);
  i.close();
} catch (java.io.IOException e) {
 p = null;
 System.out.println(e.getMessage());
}

Használat

p.getProperty("valami");
p.propertyNames();
p.put(userId, password);

Módosítások mentése

String o = this.getClass().getClassLoader().getResource(UserDirectoryFile).getFile();
p.store(new FileOutputStream(o), UserDirectoryHeader);

A resources/users.properties fájlt az src/resources könyvtárba helyezzük el. Ez bekerül a WEB-INF/classes/resources könyvtárba.

#${user}=${password}
#Wed Oct 12 14:02:33 CEST 2011
CEDRIC=Dumoulin123
FRE=dtd
ABCS=aa
FREDERICHRE=asd