java—应用程序运行在哪个Web服务器上

java—应用程序运行在哪个Web服务器上,java,Java,我有一个java应用程序,可以在tomcat和jboss上运行 我需要根据Web服务器类型为执行某些任务执行“if条件” 如何访问此信息 我需要这样做,因为我需要连接到数据源,并且我可以基于Web服务器以不同的方式获取上下文: try{ String webserver = getWebServer(); Logger logger=Logger.getLogger("myLog"); if(webserver.equalsIgnoreCase("Jboss")){

我有一个java应用程序,可以在tomcat和jboss上运行

我需要根据Web服务器类型为执行某些任务执行“if条件”

如何访问此信息

我需要这样做,因为我需要连接到数据源,并且我可以基于Web服务器以不同的方式获取上下文:

try{
    String webserver = getWebServer();
    Logger logger=Logger.getLogger("myLog");
    if(webserver.equalsIgnoreCase("Jboss")){
        logger.severe("Webserver: " + webserver);
        Hashtable<String, String> ht= new Hashtable();
        ht.put(InitialContext.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
        ht.put(InitialContext.PROVIDER_URL,"jnp://localhost:1099");
        ht.put(InitialContext.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");
        InitialContext ic=new InitialContext(ht);
        if(ic!=null){
            logger.severe("success");/*I am getting success as output here*/
            DataSource ds=(DataSource)ic.lookup(getDatasource());
            /*this is where it's failing*/
            if(ds!=null){
                logger.severe("success1");
            }
            return ds.getConnection();
        }
        return null;
    }
    else{ //TOMCAT
        logger.severe("Webserver: " + webserver);
        // Obtain our environment naming context
        Context initCtx = new InitialContext();
        Context envCtx = (Context) initCtx.lookup("java:comp/env");

        // Look up our data source
        DataSource ds = (DataSource) envCtx.lookup(getDatasource());

        // Allocate and use a connection from the pool
        Connection conn = ds.getConnection();
        return conn;
    }

}
试试看{
字符串webserver=getWebServer();
Logger=Logger.getLogger(“myLog”);
if(webserver.equalsIgnoreCase(“Jboss”)){
logger.severy(“Webserver:+Webserver”);
Hashtable ht=新的Hashtable();
put(InitialContext.InitialContext\u工厂,“org.jnp.interfaces.NamingContextFactory”);
ht.put(InitialContext.PROVIDER\u URL,“jnp://localhost:1099");
put(InitialContext.URL_PKG_前缀,“org.jboss.naming:org.jnp.interfaces”);
InitialContext ic=新的InitialContext(ht);
如果(ic!=null){
logger.severy(“success”);/*我在这里获得了成功作为输出*/
DataSource ds=(DataSource)ic.lookup(getDatasource());
/*这就是它失败的地方*/
如果(ds!=null){
严重(“成功1”);
}
返回ds.getConnection();
}
返回null;
}
else{//TOMCAT
logger.severy(“Webserver:+Webserver”);
//获取我们的环境命名上下文
Context initCtx=new InitialContext();
Context-envCtx=(Context)initCtx.lookup(“java:comp/env”);
//查找我们的数据源
DataSource ds=(DataSource)envCtx.lookup(getDatasource());
//从池中分配并使用连接
连接conn=ds.getConnection();
返回连接;
}
}
Tomcat版本在jboss上不起作用,反之亦然
谢谢大家!

非常不寻常的要求,但是可以使用系统属性来实现。在服务器启动脚本中,通过JAVA_选项中的系统属性,如:

-Dserver=tomcat
为不同的服务器传递不同的值,然后可以通过以下代码读取此系统属性:

System.getProperty("server");

然而,使用系统属性可以实现非常不寻常的需求。在服务器启动脚本中,通过JAVA_选项中的系统属性,如:

-Dserver=tomcat
为不同的服务器传递不同的值,然后可以通过以下代码读取此系统属性:

System.getProperty("server");

由于您的应用程序可以在Tomcat上运行,Tomcat是一个简单的servlet容器,因此您可能需要使用它。获取有关应用程序运行环境的信息。

由于应用程序可以在Tomcat上运行,而Tomcat是一个简单的servlet容器,因此您可能需要使用它。获取有关应用程序运行环境的信息。

为什么需要这样做?您希望执行哪类任务?这是不寻常的,因为war的意义在于它可以在任何appserver中运行,并且不应该知道它。我更新了问题以提供更多信息。请参阅此链接执行请求并阅读标题,幸运的是,您会得到使用哪台服务器的提示。我知道你的应用程序可以在任何服务器上运行,而你可能无法控制服务器,对吗?你为什么需要这样做?你想做什么样的任务?这是不寻常的,因为war的意义在于它可以在任何appserver中运行,并且不应该知道它。我更新了问题以提供更多信息。请参阅此链接执行请求并阅读标题,幸运的是,您会得到使用哪台服务器的提示。我知道你的应用程序可以在任何服务器上运行,而你可能无法控制服务器,对吗?把这个参数放在webapp的webdescriptor中不是更好吗?@petermm:通常是的,但不是在这种情况下,由于用户希望在两台应用服务器上使用相同的web应用程序。将此参数放入web应用程序的webdescriptor中不是更好吗?@Petermm:通常是,但在这种情况下不是,因为用户希望在两台应用服务器上使用相同的web应用程序。