在 EJB 中读取时,静态变量给出空值或默认值 - jboss EAP 6.1.0

Static Variable gives null or default value when read in an EJB- jboss EAP 6.1.0

我们已将我们的应用程序从 weblogic 10.0 迁移到 jboss EAP 6.1.0。

从我们的 EJB 访问在 servlet 的 init() 方法中加载的属性时,返回值为 null。

以下方法在 Ejbbean 类中:

public void execute() throws EJBException
    {
System.out.println("Constants.x in execute  ----"+Constants.x);
}

此处打印的值为空。尽管如果我们在 EJB 以外的任何地方在我们的应用程序中使用相同的代码,则会返回正确的值。

我们正在加载 servlet 的 init 方法中的属性。

public void init() throws javax.servlet.ServletException 
    {
ServletContext sContext = this.getServletContext();
        try 
        {
    String propFile = sContext.getInitParameter("abc");
            Properties prop = new Properties();
            FileInputStream inStream = new FileInputStream(propFile);
            prop.load(inStream);
Constants.loadValues(prop);
 System.out.println("Constants.x in execute  ----"+Constants.x);
}

此处打印了静态变量 x 的正确值。

        public final class Constants
        {

            public static String x = null;

    public final static void loadValues(Properties prop) throws Exception
        {
    // the properties are loaded here...
    }
}

当相同的代码在其他地方运行良好时,EJB 内部静态变量的这种意外行为背后的原因是什么?部署在weblogic server上的应用程序没有这个问题。

如何解决这个问题?

我找到了这个问题的解决方案。 jboss-deployment-structure.xml需要为EJB依赖于WAR.

的应用编写

参考资料link: http://www.mastertheboss.com/jboss-server/jboss-deploy/configuring-jboss-as-7-deployment-order