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

Module 如何在jboss7启动时执行jar文件?,module,jboss7.x,Module,Jboss7.x,我有一个简单的java类,它在“TMSCore”java项目中显示执行时的“等待”文本 package com.stock.bo; public class example { /** * @param args */ public static void main(String[] args) { // ApplicationContext context = new ClassPathX

我有一个简单的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

然后,我在我的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中的“等待”文本并没有显示在控制台上

我的要求是,一旦jboss启动,我应该在我的控制台上获得“===============================>等待”

或者有人能建议如何在启动jboss服务器时执行jar吗


顺便说一句,我使用的是JBOSS7.1

如果我是对的,那是因为JBoss不执行库,它只加载
jar
文件中包含的类。因此,放置一个主函数并生成一个可执行的
jar
将没有帮助

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

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

    
    
  • 现在您有了一个只加载一次类的模块。我建议您只需要一个
    示例
    类的实例:

    公共类示例{
    //唯一的一个例子
    私有静态示例实例;
    //私有构造函数以避免创建此类的其他实例
    私人示例()
    {
    System.out.println(“等待”);
    }
    公共静态示例getInstance()
    {
    if(实例==null)
    {
    实例=新示例();
    }
    返回实例;
    }
    }
    
    然后在服务器上的所有项目中使用它

    Example ex=Example.getInstance();
    
    将返回现有实例(或第一次创建一个)

    注意:我无法尝试,因此不能保证这会起作用


    编辑:可能对
    示例
    类稍作修改也可以使其在类加载期间运行:

    公共类示例{
    //唯一的一个例子
    私有静态示例实例=新示例();
    //私有构造函数以避免创建此类的其他实例
    私人示例()
    {
    System.out.println(“等待”);
    }
    公共静态示例getInstance()
    {
    返回实例;
    }
    }
    

    再次声明:未测试。

    如果我是对的,那是因为JBoss不执行库,它只加载
    jar
    文件中包含的类。因此,放置一个主函数并生成一个可执行的
    jar
    将没有帮助

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

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

    
    
  • 现在您有了一个只加载一次类的模块。我建议您只需要一个
    示例
    类的实例:

    公共类示例{
    //唯一的一个例子
    私有静态示例实例;
    //私有构造函数以避免创建此类的其他实例
    私人示例()
    {
    System.out.println(“等待”);
    }
    公共静态示例getInstance()
    {
    if(实例==null)
    {
    实例=新示例();
    }
    返回实例;
    }
    }
    
    然后在服务器上的所有项目中使用它

    Example ex=Example.getInstance();
    
    将返回现有实例(或第一次创建一个)

    注意:我无法尝试,因此不能保证这会起作用


    编辑:可能对
    示例
    类稍作修改也可以使其在类加载期间运行:

    公共类示例{
    //唯一的一个例子
    私有静态示例实例=新示例();
    //私有构造函数以避免创建此类的其他实例
    私人示例()
    {
    System.out.println(“等待”);
    }
    公共静态示例getInstance()
    {
    返回实例;
    }
    }
    

    同样:未测试。

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

    @Startup
    @Singleton
     public class FooBean {
    
       @PostConstruct 
       void atStartup() { ... }
    
       @PreDestroy
       void atShutdown() { ... }
    
    }
    
    这将在应用程序启动和关闭时发生。我会从那里调用你需要的函数


    请参见

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

    @Startup
    @Singleton
     public class FooBean {
    
       @PostConstruct 
       void atStartup() { ... }
    
       @PreDestroy
       void atShutdown() { ... }
    
    }
    
    这将在应用程序启动和关闭时发生。我会从那里调用你需要的函数