Jboss 在作业启动后调用方法

Jboss 在作业启动后调用方法,jboss,struts2,servlet-filters,dispatcher,Jboss,Struts2,Servlet Filters,Dispatcher,您好,我正在使用struts 2,希望在服务器启动后调用一个方法。 在服务器启动时,我们可以使用FILTER DISPATCHER。 我正在使用jax-ws。我正在同一jboss服务器上部署我的jax客户机和端点项目。 如何解决这个问题 Plz help您可以实现一个ServletContextListener来响应servlet启动 按如下方式创建您的实现: public class SimpleInitializer implements ServletContextListener {

您好,我正在使用struts 2,希望在服务器启动后调用一个方法。 在服务器启动时,我们可以使用FILTER DISPATCHER。
我正在使用jax-ws。我正在同一jboss服务器上部署我的jax客户机和端点项目。 如何解决这个问题
Plz help

您可以实现一个
ServletContextListener
来响应servlet启动

按如下方式创建您的实现:

public class SimpleInitializer implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        //Place your startup logic here.
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    }
}
然后,将其包含在web.xml中,如下所示:

<listener>
    <display-name>SIMPLE Startup Listener</display-name>
    <listener-class>com.you.init.SimpleInitializer</listener-class>
</listener>

简单启动侦听器
com.you.init.SimpleInitializer
//作者:Gaurav Kumar(Skillrock Technology的SE)


您可以做的另一件事是运行一个线程,并在Filter Dispatcher中检查
var
的值。如果为true,则调用web服务并将数据设置到Servlet上下文中,否则将在特定时间内休眠线程。一旦检索到值,请停止此线程

当您的服务器启动时,它将通过web.xml中的侦听器并调用其contextInitialized()方法,因此您可以确保在服务器启动后立即执行启动逻辑。这就是ServletContextListener的用途-将项目部署到JBoss后,JBoss启动您的项目并调用您的侦听器类,无论您在contextInitialized()方法中放置了什么,都将在服务器启动和项目部署后调用。你试过了吗?我正在使用jax-ws。我正在一台jboss服务器上部署我的jax客户机和服务器。因此,我的客户端需要在设置某些数据调用特定方法之前部署服务器项目。您忽略了在服务器上部署2个项目的重要细节。。。在这种情况下,如果您希望客户端与服务器项目交互,我建议您定期“ping”服务器直到它启动,如果服务器仍处于关闭状态,则抛出一个错误,并在一段时间后重试。只需执行通常的webservice调用,并在服务器连接失败时捕获网络/io错误。您可以按照自己的意愿处理错误,例如重试。您可以通过在服务器启动时获取服务器信息并从FilterDispatcher Java文件调用特定的web服务URL来完成此任务。在以下代码的帮助下,我完成了相同的场景。
    try{
    MBeanServerConnection server = (MBeanServerConnection)new InitialContext().lookup("jmx/rmi/RMIAdaptor");
    ObjectName on = new ObjectName("jboss.system:type=Server");
    Object var = server.getAttribute(on, "Started");
    System.out.println(var);

        String serverURL = "http://gaurav-compaq-presario-c700-notebook-pc:8080/WServer?wsdl";
        String message = "gaurav";
        HashMap env = new HashMap();
        String[] creds = new String[1];
        creds[0] = message;
        env.put(JMXConnector.CREDENTIALS, creds);
        JMXServiceURL url = new JMXServiceURL(serverURL);
        JMXConnector jmxc = JMXConnectorFactory.connect(url, env);
           // Remember to call jmxc.close() when you are done with server connection.
        MBeanServerConnection server1 = jmxc.getMBeanServerConnection();
          System.out.println(server.getAttribute(new ObjectName("MyDomain:key=property"), "AnAttribute"));
          server.invoke(new ObjectName("MyDomain:key=property"), "doSomething", new Object[0], new String[0]);
    }catch(Exception e){
        System.out.println(e);
    }
MBeanServerConnection server = (MBeanServerConnection)new InitialContext().lookup("jmx/rmi/RMIAdaptor");
ObjectName on = new ObjectName("jboss.system:type=Server");
Object var = server.getAttribute(on, "Started");
System.out.println(**var**);