[jetrix-cvs] SF.net SVN: jetrix:[797] jetrix/trunk/src
Brought to you by:
smanux
From: <sm...@us...> - 2009-02-18 14:03:29
|
Revision: 797 http://jetrix.svn.sourceforge.net/jetrix/?rev=797&view=rev Author: smanux Date: 2009-02-18 14:03:17 +0000 (Wed, 18 Feb 2009) Log Message: ----------- Added support for multiple datasources Modified Paths: -------------- jetrix/trunk/src/admin/WEB-INF/classes/net/jetrix/servlets/ServerAction.java jetrix/trunk/src/admin/server.jsp jetrix/trunk/src/etc/conf/server.xml jetrix/trunk/src/etc/tetrinet-server.dtd jetrix/trunk/src/java/net/jetrix/DataSourceManager.java jetrix/trunk/src/java/net/jetrix/Server.java jetrix/trunk/src/java/net/jetrix/config/DataSourceConfig.java jetrix/trunk/src/java/net/jetrix/config/ServerConfig.java jetrix/trunk/src/java/net/jetrix/config/ServerRuleSet.java Modified: jetrix/trunk/src/admin/WEB-INF/classes/net/jetrix/servlets/ServerAction.java =================================================================== --- jetrix/trunk/src/admin/WEB-INF/classes/net/jetrix/servlets/ServerAction.java 2009-02-18 13:28:05 UTC (rev 796) +++ jetrix/trunk/src/admin/WEB-INF/classes/net/jetrix/servlets/ServerAction.java 2009-02-18 14:03:17 UTC (rev 797) @@ -110,16 +110,17 @@ } else if ("datasource.update".equals(action)) { - DataSourceConfig datasourceConfig = new DataSourceConfig(); - datasourceConfig.setDriver(request.getParameter("driver")); - datasourceConfig.setUrl(request.getParameter("url")); - datasourceConfig.setUsername(request.getParameter("username")); - datasourceConfig.setPassword(request.getParameter("password")); - datasourceConfig.setMinIdle(Integer.parseInt(request.getParameter("minIdle"))); - datasourceConfig.setMaxActive(Integer.parseInt(request.getParameter("maxActive"))); + DataSourceConfig datasource = new DataSourceConfig(); + datasource.setName(request.getParameter("name")); + datasource.setDriver(request.getParameter("driver")); + datasource.setUrl(request.getParameter("url")); + datasource.setUsername(request.getParameter("username")); + datasource.setPassword(request.getParameter("password")); + datasource.setMinIdle(Integer.parseInt(request.getParameter("minIdle"))); + datasource.setMaxActive(Integer.parseInt(request.getParameter("maxActive"))); - config.setDataSource(datasourceConfig); - DataSourceManager.getInstance().setDataSource(datasourceConfig); + config.addDataSource(datasource); + DataSourceManager.getInstance().setDataSource(datasource, datasource.getName()); } else if ("gc".equals(action)) { Modified: jetrix/trunk/src/admin/server.jsp =================================================================== --- jetrix/trunk/src/admin/server.jsp 2009-02-18 13:28:05 UTC (rev 796) +++ jetrix/trunk/src/admin/server.jsp 2009-02-18 14:03:17 UTC (rev 797) @@ -196,7 +196,7 @@ <% } %> </table> - <!-- list, add, remove --> + <!-- todo add, remove filters --> </div> <div class="tab-page" style="height: 400px; overflow: auto"> @@ -325,7 +325,7 @@ <td width="70" align="center"><%= listener.isRunning() ? "Started" : "Stopped" %></td> <td width="70" align="center"><%= listener.isAutoStart() ? "yes" : "no" %></td> <td width="50"> - <form id="listener" action="/servlet/<%= ServerAction.class.getName() %>"> + <form id="listener-<%= i %>" action="/servlet/<%= ServerAction.class.getName() %>"> <input type="hidden" name="index" value="<%= i %>"> <% if (listener.isRunning()) { %> <input type="hidden" name="action" value="listener.stop"> @@ -342,7 +342,7 @@ <br> - <input type="button" value="Add"> + <!-- todo <input type="button" value="Add"> --> </div> <div class="tab-page" style="height: 400px"> @@ -364,7 +364,7 @@ <td width="70" align="center"><%= service.isRunning() ? "Started" : "Stopped" %></td> <td width="70" align="center"><%= service.isAutoStart() ? "yes" : "no" %></td> <td width="50"> - <form id="listener" action="/servlet/<%= ServerAction.class.getName() %>"> + <form id="service-<%= i %>" action="/servlet/<%= ServerAction.class.getName() %>"> <input type="hidden" name="index" value="<%= i %>"> <% if (service.isRunning()) { %> <input type="hidden" name="action" value="service.stop"> @@ -381,7 +381,7 @@ <br> - <input type="button" value="Add"> + <!-- todo <input type="button" value="Add"> --> </div> <div class="tab-page" style="height: 400px"> @@ -404,36 +404,43 @@ </div> - <div class="tab-page" style="height: 400px"> - <h2 class="tab">Database</h2> - + <div class="tab-page" style="height: 400px; overflow: auto"> + <h2 class="tab">Databases</h2> + +<% for (DataSourceConfig datasource : conf.getDataSources()) { %> + <form id="datasource" action="/servlet/<%= ServerAction.class.getName() %>"> <input type="hidden" name="action" value="datasource.update"> - + <input type="hidden" name="name" value="<%= datasource.getName() %>"> + <table class="thin" style="width: 400px"> <tr> + <th width="30%">Name</th> + <td><b><%= datasource.getName() %></b></td> + </tr> + <tr> <th width="30%">Driver</th> - <td><input class="thin" type="text" name="driver" value="<%= conf.getDataSource().getDriver() %>" style="width: 98%"></td> + <td><input class="thin" type="text" name="driver" value="<%= datasource.getDriver() %>" style="width: 98%"></td> </tr> <tr> <th>URL</th> - <td><input class="thin" type="text" name="url" value="<%= conf.getDataSource().getUrl() %>" style="width: 98%"></td> + <td><input class="thin" type="text" name="url" value="<%= datasource.getUrl() %>" style="width: 98%"></td> </tr> <tr> <th>Username</th> - <td><input class="thin" type="text" name="username" value="<%= conf.getDataSource().getUsername() %>"></td> + <td><input class="thin" type="text" name="username" value="<%= datasource.getUsername() %>"></td> </tr> <tr> <th>Password</th> - <td><input class="thin" type="text" name="password" value="<%= conf.getDataSource().getPassword() %>"></td> + <td><input class="thin" type="text" name="password" value="<%= datasource.getPassword() %>"></td> </tr> <tr> <th>Min Idle</th> - <td><input class="thin" type="text" name="minIdle" value="<%= conf.getDataSource().getMinIdle() %>"></td> + <td><input class="thin" type="text" name="minIdle" value="<%= datasource.getMinIdle() %>"></td> </tr> <tr> <th>Max Active</th> - <td><input class="thin" type="text" name="maxActive" value="<%= conf.getDataSource().getMaxActive() %>"></td> + <td><input class="thin" type="text" name="maxActive" value="<%= datasource.getMaxActive() %>"></td> </tr> </table> @@ -442,6 +449,11 @@ <input type="submit" value="Update"> </form> + + <br> + +<% } %> + </div> <div class="tab-page" style="height: 400px"> @@ -512,6 +524,7 @@ </div> </div> +</div> </body> </html> Modified: jetrix/trunk/src/etc/conf/server.xml =================================================================== --- jetrix/trunk/src/etc/conf/server.xml 2009-02-18 13:28:05 UTC (rev 796) +++ jetrix/trunk/src/etc/conf/server.xml 2009-02-18 14:03:17 UTC (rev 797) @@ -108,18 +108,20 @@ </ban> <!-- Database connection parameters --> - <datasource> - <!-- The class of the JDBC driver used --> - <driver>com.mysql.jdbc.Driver</driver> + <datasources> + <datasource name="DEFAULT"> + <!-- The class of the JDBC driver used --> + <driver>com.mysql.jdbc.Driver</driver> - <!-- The URL of the database (jdbc:<type>://<hostname>:<port>/<database>) --> - <url>jdbc:mysql://localhost/jetrix</url> + <!-- The URL of the database (jdbc:<type>://<hostname>:<port>/<database>) --> + <url>jdbc:mysql://localhost/jetrix</url> - <!-- The username connecting to the database --> - <username>jetrix</username> + <!-- The username connecting to the database --> + <username>jetrix</username> - <!-- The password of the user --> - <password>jetrixpass</password> - </datasource> + <!-- The password of the user --> + <password>jetrixpass</password> + </datasource> + </datasources> </tetrinet-server> Modified: jetrix/trunk/src/etc/tetrinet-server.dtd =================================================================== --- jetrix/trunk/src/etc/tetrinet-server.dtd 2009-02-18 13:28:05 UTC (rev 796) +++ jetrix/trunk/src/etc/tetrinet-server.dtd 2009-02-18 14:03:17 UTC (rev 797) @@ -23,7 +23,7 @@ <!ELEMENT tetrinet-server (name?, language?, timeout?, max-channels?, max-players?, max-connections?, op-password, admin-password, access-log, - error-log, channels?, listeners, services?, commands, ban?, datasource?)> + error-log, channels?, listeners, services?, commands, ban?, datasources?)> <!ATTLIST tetrinet-server host CDATA #IMPLIED> <!ELEMENT name (#PCDATA)> @@ -70,7 +70,9 @@ <!ELEMENT nick (#PCDATA)> <!ELEMENT team (#PCDATA)> +<!ELEMENT datasources (datasource*)> <!ELEMENT datasource (driver, url, username, password?, min-idle?, max-active?)> +<!ATTLIST datasource name CDATA #REQUIRED> <!ELEMENT driver (#PCDATA)> <!ELEMENT url (#PCDATA)> <!ELEMENT username (#PCDATA)> Modified: jetrix/trunk/src/java/net/jetrix/DataSourceManager.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/DataSourceManager.java 2009-02-18 13:28:05 UTC (rev 796) +++ jetrix/trunk/src/java/net/jetrix/DataSourceManager.java 2009-02-18 14:03:17 UTC (rev 797) @@ -23,7 +23,6 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; -import java.sql.SQLException; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; @@ -46,8 +45,14 @@ private Map<String, DataSource> datasources = new HashMap<String, DataSource>(); /** Key of the default datasource. */ - private static final String DEFAULT_DATASOURCE = "DEFAULT"; + public static final String DEFAULT_DATASOURCE = "DEFAULT"; + /** Default number of the minimum idle connections */ + public static final int DEFAULT_MIN_IDLE = 1; + + /** Default number of maximum active connections */ + public static final int DEFAULT_MAX_ACTIVE = 50; + private DataSourceManager() { } @@ -67,7 +72,7 @@ public DataSource getDataSource(String environnement) { - return (DataSource) datasources.get(environnement); + return datasources.get(environnement); } /** @@ -112,8 +117,8 @@ datasource.setUrl(config.getUrl()); datasource.setUsername(config.getUsername()); datasource.setPassword(config.getPassword()); - datasource.setMinIdle(config.getMinIdle() != 0 ? config.getMinIdle() : 1); - datasource.setMaxActive(config.getMaxActive() != 0 ? config.getMaxActive() : 50); + datasource.setMinIdle(config.getMinIdle() != 0 ? config.getMinIdle() : DEFAULT_MIN_IDLE); + datasource.setMaxActive(config.getMaxActive() != 0 ? config.getMaxActive() : DEFAULT_MAX_ACTIVE); // attempts to open the connection datasource.getConnection().close(); Modified: jetrix/trunk/src/java/net/jetrix/Server.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/Server.java 2009-02-18 13:28:05 UTC (rev 796) +++ jetrix/trunk/src/java/net/jetrix/Server.java 2009-02-18 14:03:17 UTC (rev 797) @@ -102,11 +102,14 @@ // prepare the loggers LogManager.init(); - // open the database connection - if (config.getDataSource() != null) + // open the database connections + if (!config.getDataSources().isEmpty()) { - log.info("Initializing the datasource..."); - DataSourceManager.getInstance().setDataSource(config.getDataSource()); + log.info("Initializing the datasources..."); + for (DataSourceConfig datasource : config.getDataSources()) + { + DataSourceManager.getInstance().setDataSource(datasource, datasource.getName()); + } } // display the systray icon (windows only) Modified: jetrix/trunk/src/java/net/jetrix/config/DataSourceConfig.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/config/DataSourceConfig.java 2009-02-18 13:28:05 UTC (rev 796) +++ jetrix/trunk/src/java/net/jetrix/config/DataSourceConfig.java 2009-02-18 14:03:17 UTC (rev 797) @@ -19,21 +19,43 @@ package net.jetrix.config; +import net.jetrix.DataSourceManager; + /** * Configuration for a pool of connections to a database. * * @author Emmanuel Bourg * @version $Revision$, $Date$ + * @since 0.3 */ public class DataSourceConfig { + private String name = DataSourceManager.DEFAULT_DATASOURCE; private String url; private String driver; private String username; private String password; - private int minIdle; - private int maxActive; + private int minIdle = DataSourceManager.DEFAULT_MIN_IDLE; + private int maxActive = DataSourceManager.DEFAULT_MAX_ACTIVE; + /** + * Tells if this datasource is the default datasource. + */ + public boolean isDefault() + { + return DataSourceManager.DEFAULT_DATASOURCE.equals(name); + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + public String getUrl() { return url; Modified: jetrix/trunk/src/java/net/jetrix/config/ServerConfig.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/config/ServerConfig.java 2009-02-18 13:28:05 UTC (rev 796) +++ jetrix/trunk/src/java/net/jetrix/config/ServerConfig.java 2009-02-18 14:03:17 UTC (rev 797) @@ -76,7 +76,7 @@ private Statistics statistics = new Statistics(); // datasource configuration - private DataSourceConfig datasourceConfig; + private Map<String, DataSourceConfig> datasources = new LinkedHashMap<String, DataSourceConfig>(); private URL serverConfigURL; private URL channelsConfigURL; @@ -269,43 +269,52 @@ out.println(" </ban>"); out.println(); - if (datasourceConfig != null) + if (!datasources.isEmpty()) { out.println(" <!-- Database connection parameters -->"); - out.println(" <datasource>"); - out.println(" <!-- The class of the JDBC driver used -->"); - out.println(" <driver>" + datasourceConfig.getDriver() + "</driver>"); + out.println(" <datasources>"); out.println(); - out.println(" <!-- The URL of the database (jdbc:<type>://<hostname>:<port>/<database>) -->"); - out.println(" <url>" + datasourceConfig.getUrl() + "</url>"); - out.println(); - out.println(" <!-- The username connecting to the database -->"); - out.println(" <username>" + datasourceConfig.getUsername() + "</username>"); - out.println(); - out.println(" <!-- The password of the user -->"); - if (datasourceConfig.getPassword() != null) + + for (DataSourceConfig datasource : datasources.values()) { - out.println(" <password>" + datasourceConfig.getPassword() + "</password>"); - } - else - { - out.println(" <password/>"); - } - if (datasourceConfig.getMinIdle() != 0) - { + out.println(" <datasource name=\"" + datasource.getName() + "\">"); + out.println(" <!-- The class of the JDBC driver used -->"); + out.println(" <driver>" + datasource.getDriver() + "</driver>"); out.println(); - out.println(" <!-- The minimum number of idle connections -->"); - out.println(" <min-idle>" + datasourceConfig.getMinIdle() + "</min-idle>"); - } - if (datasourceConfig.getMaxActive() != 0) - { + out.println(" <!-- The URL of the database (jdbc:<type>://<hostname>:<port>/<database>) -->"); + out.println(" <url>" + datasource.getUrl() + "</url>"); out.println(); - out.println(" <!-- The maximum number of active connections -->"); - out.println(" <max-active>" + datasourceConfig.getMaxActive() + "</max-active>"); + out.println(" <!-- The username connecting to the database -->"); + out.println(" <username>" + datasource.getUsername() + "</username>"); + out.println(); + out.println(" <!-- The password of the user -->"); + if (datasource.getPassword() != null) + { + out.println(" <password>" + datasource.getPassword() + "</password>"); + } + else + { + out.println(" <password/>"); + } + if (datasource.getMinIdle() != DataSourceManager.DEFAULT_MIN_IDLE) + { + out.println(); + out.println(" <!-- The minimum number of idle connections -->"); + out.println(" <min-idle>" + datasource.getMinIdle() + "</min-idle>"); + } + if (datasource.getMaxActive() != DataSourceManager.DEFAULT_MAX_ACTIVE) + { + out.println(); + out.println(" <!-- The maximum number of active connections -->"); + out.println(" <max-active>" + datasource.getMaxActive() + "</max-active>"); + } + out.println(" </datasource>"); + out.println(); } - out.println(" </datasource>"); + out.println(" </datasources>"); out.println(); } + out.println("</tetrinet-server>"); @@ -941,16 +950,16 @@ /** * @since 0.3 */ - public DataSourceConfig getDataSource() + public Collection<DataSourceConfig> getDataSources() { - return datasourceConfig; + return datasources.values(); } /** * @since 0.3 */ - public void setDataSource(DataSourceConfig datasourceConfig) + public void addDataSource(DataSourceConfig datasource) { - this.datasourceConfig = datasourceConfig; + datasources.put(datasource.getName(), datasource); } } Modified: jetrix/trunk/src/java/net/jetrix/config/ServerRuleSet.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/config/ServerRuleSet.java 2009-02-18 13:28:05 UTC (rev 796) +++ jetrix/trunk/src/java/net/jetrix/config/ServerRuleSet.java 2009-02-18 14:03:17 UTC (rev 797) @@ -77,7 +77,9 @@ // datasource digester.addObjectCreate("*/datasource", "net.jetrix.config.DataSourceConfig"); - digester.addSetNext("*/datasource", "setDataSource", "net.jetrix.config.DataSourceConfig"); + digester.addSetNext("*/datasource", "addDataSource", "net.jetrix.config.DataSourceConfig"); + digester.addCallMethod("*/datasource", "setName", 1); + digester.addCallParam("*/datasource", 0, "name"); digester.addCallMethod("*/datasource/driver", "setDriver", 0); digester.addCallMethod("*/datasource/url", "setUrl", 0); digester.addCallMethod("*/datasource/username", "setUsername", 0); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |