【问题标题】:"Servlet" (server-side) initialization code in GWTGWT 中的“Servlet”(服务器端)初始化代码
【发布时间】:2014-05-24 20:32:21
【问题描述】:

如何在 GWT 应用程序的服务器端进行一次初始化?

我可能想像HttpServlet 这样你可以覆盖init(),但旧习惯早就丢掉了;)

我想做的是:

  • 加载一堆属性

  • 建立与数据库的连接

【问题讨论】:

  • 你可能想试试 ServletContextListener

标签: java gwt


【解决方案1】:

加载一堆属性?

注册 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-urluser-namepassword

在这种情况下,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>

【讨论】:

    【解决方案2】:

    您可以添加评论中提到的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>
    

    【讨论】:

      猜你喜欢
      • 2013-06-15
      • 2023-03-18
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 2020-09-25
      相关资源
      最近更新 更多