【发布时间】:2014-05-24 20:32:21
【问题描述】:
如何在 GWT 应用程序的服务器端进行一次初始化?
我可能想像HttpServlet 这样你可以覆盖init(),但旧习惯早就丢掉了;)
我想做的是:
加载一堆属性
建立与数据库的连接
【问题讨论】:
-
你可能想试试 ServletContextListener
如何在 GWT 应用程序的服务器端进行一次初始化?
我可能想像HttpServlet 这样你可以覆盖init(),但旧习惯早就丢掉了;)
我想做的是:
加载一堆属性
建立与数据库的连接
【问题讨论】:
加载一堆属性?
注册 ServletContextListener 以在服务器启动时加载 Init 参数。
加载属性并使其对其他类静态可见。
我已经发布了示例代码Retrieve Init parameters outside servlet
建立与数据库的连接?
使用 JNDI 绑定数据源。
使用连接实用程序类获取连接并在连接完成后立即关闭。
这里是示例代码。
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import com.woodmac.datavisualizer.shared.DVConstants;
public class ConnectionUtil {
private DataSource dataSource;
private static ConnectionUtil instance = new ConnectionUtil();
private ConnectionUtil() {
try {
Context initContext = new InitialContext();
dataSource = (DataSource) initContext.lookup(JNDI_LOOKUP_NAME);
} catch (NamingException e) {
e.printStackTrace();
}
}
public static ConnectionUtil getInstance() {
return instance;
}
public Connection getConnection() throws SQLException {
Connection connection = dataSource.getConnection();
return connection;
}
public void close(Connection connection) throws SQLException {
if (connection != null && !connection.isClosed()) {
connection.close();
}
connection = null;
}
}
如果您使用的是JBOSS in standalone mode。然后只需在standalone.xml 中输入一些条目即可创建数据源。只需根据您的数据库连接更新它的一些值,例如connection-url、user-name 和password。
在这种情况下,JNDI_LOOKUP_NAME 将是 java:jboss/datasources/oracle
<datasource jta="true" jndi-name="java:jboss/datasources/oracle" pool-name="OracleDS" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:oracle:thin:@ipaddress:1521/sid</connection-url>
<driver>oracle</driver>
<new-connection-sql>select * from dual</new-connection-sql>
<pool>
<min-pool-size>20</min-pool-size>
<max-pool-size>50</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>username</user-name>
<password>password</password>
</security>
<validation>
<check-valid-connection-sql>select * from dual</check-valid-connection-sql>
<background-validation>true</background-validation>
</validation>
<timeout>
<blocking-timeout-millis>30000</blocking-timeout-millis>
<idle-timeout-minutes>1</idle-timeout-minutes>
<use-try-lock>60</use-try-lock>
<allocation-retry>1</allocation-retry>
</timeout>
</datasource>
【讨论】:
您可以添加评论中提到的ServletContextListener。
public class ServerConfig implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
// Do stuff on startup.
}
public void contextDestroyed(ServletContextEvent event) {
// Do stuff on shutdown.
}
}
现在把新类放到服务器端,你还需要在你的 web.xml 文件中注册监听器:
<listener>
<listener-class>path.to.class.ServerConfig</listener-class>
</listener>
【讨论】: