我有一个简单的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并粘贴在同一路径
<?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
答案 0 :(得分:2)
如果我是对的,那是因为JBoss没有执行库,只有加载 jar
文件中包含的类。因此,放置一个main函数并生成可执行文件jar
将无济于事。
如果您的目标是在服务器上安装全局模块,我建议您进行以下修改:
jboss-deployment-structure.xml
中的依赖项(正如您已经完成的那样)在服务器上将其声明为全局模块,因此JBoss只会加载一次。编辑配置文件standalone.xml
并修改部分:
<subsystem xmlns="urn:jboss:domain:ee:1.0">
<global-modules>
<module name="org.tms" />
</global-modules>
</subsystem>
现在你有一个只加载一次类的模块。我只需要你的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() { ... }
}
这将在应用程序启动和关闭时发生。我会从那里调用你需要的功能。