如何在jboss7启动时执行jar文件?

时间:2013-05-02 14:23:12

标签: module jboss7.x

我有一个简单的java类,在“TMSCore”java项目中显示“等待”文本。

 package com.stock.bo;

    public class example {

        /**
         * @param args
         */
        public static void main(String[] args) {
            // ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
             System.out.println("================================> waiting");
        }

    }

我创建了TMSCore.jar并将此example.class设置为我的jar文件的入口点。

然后我在C:\ Jboss \ jboss-as-7.1.1 \ modules \ org \ tms \ main中为这个项目创建了一个模块,并将jar粘贴在同一个路径中

然后我创建了module.xml并粘贴在同一路径

module.xml

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.tms">
   <resources>
    <resource-root path="TMSCore.jar"/>
   </resources>
</module>

然后我在webproject / web-inf目录中创建了一个jboss-deployment-structure.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
    <dependencies>
      <module name="org.tms"/>
    </dependencies>
  </deployment>
</jboss-deployment-structure>

当我使用上面包含jboss-deployment-structure.xml的war启动服务器时,在我的控制台中显示已部署的TMSCore.jar

但我的jar中的“等待”文本未显示在控制台上

我的要求是我应该在我的控制台上获得“================================&gt;等待” jboss启动了

或者任何人都可以建议如何在启动jboss服务器时执行jar?

BTW我正在使用JBOSS7.1

2 个答案:

答案 0 :(得分:2)

如果我是对的,那是因为JBoss没有执行库,只有加载 jar文件中包含的类。因此,放置一个main函数并生成可执行文件jar将无济于事。

如果您的目标是在服务器上安装全局模块,我建议您进行以下修改:

  1. 创建模块(正如您已经完成的那样)
  2. 将其声明为jboss-deployment-structure.xml中的依赖项(正如您已经完成的那样)
  3. 在服务器上将其声明为全局模块,因此JBoss只会加载一次。编辑配置文件standalone.xml并修改部分:

    <subsystem xmlns="urn:jboss:domain:ee:1.0">
        <global-modules>
            <module name="org.tms" />
        </global-modules>
    </subsystem>
    
  4. 现在你有一个只加载一次类的模块。我只需要你的Example课程的一个实例,我建议你使用单身:

    public class Example {
    
        // The only one instance
        private static Example instance;
    
        // Private constructor to avoid creation of other instances of this class
        private Example()
        {
            System.out.println("================================> waiting");
        }
    
    
        public static Example getInstance()
        {
            if(instance == null)
            {
                instance = new Example();
            }
            return instance;
        }
    
    }
    

    然后在服务器上的所有项目中使用它

    Example ex = Example.getInstance();
    

    将返回现有实例(或第一次创建实例)。

    注意:我无法尝试,所以无法保证这样做。


    编辑:对Example类进行一些小修改也可以让它在加载类时运行:

    public class Example {
    
        // The only one instance
        private static Example instance = new Example();
    
        // Private constructor to avoid creation of other instances of this class
        private Example()
        {
            System.out.println("================================> waiting");
        }
    
        public static Example getInstance()
        {
            return instance;
        }
    
    }
    

    再次:未经测试。

答案 1 :(得分:2)

您无法运行jar,但可以在单例中执行启动方法。

@Startup
@Singleton
 public class FooBean {

   @PostConstruct 
   void atStartup() { ... }

   @PreDestroy
   void atShutdown() { ... }

}

这将在应用程序启动和关闭时发生。我会从那里调用你需要的功能。

请参阅http://docs.oracle.com/javaee/6/tutorial/doc/gipvi.html