有个war包,部署到单个机器的weblogic服务器上,没有问题。但是部署到多个节点的weblogic服务器上报错,仔细排查了下,发现报错的地方,是获取单例模式的类对象时,抛出了空指针异常。具体出错信息如下:
####<2013-10-29 下午06时27分04秒 CST> <Info> <Health> <scapp2> <AdminServer> <weblogic.GCMonitor> <<anonymous>> <> <> <1383042424366> <BEA-310002> <47% of the total memory in the server is free.> 
####<2013-10-29 下午09时54分05秒 CST> <Info> <J2EE Deployment SPI> <scapp2> <AdminServer> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <weblogic> <> <> <1383054845681> <BEA-260121> <Initiating redeploy operation for application, mxdl [archive: D:\mxdl\mxdl.war], to server1 server2 server3 server4 .> 
####<2013-10-29 下午09时54分19秒 CST> <Info> <Deployer> <scapp2> <AdminServer> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <weblogic> <> <> <1383054859081> <BEA-149038> <Initiating task for mxdl : [Deployer:149026]deploy application mxdl on server1,server2,server4,server3..> 
####<2013-10-29 下午09时55分07秒 CST> <Info> <Health> <scapp2> <AdminServer> <weblogic.GCMonitor> <<anonymous>> <> <> <1383054907130> <BEA-310002> <60% of the total memory in the server is free.> 
####<2013-10-29 下午09时58分07秒 CST> <Warning> <Deployer> <scapp2> <AdminServer> <[ACTIVE] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1383055087357> <BEA-149004> <Failures were detected while initiating deploy task for application "mxdl".> 
####<2013-10-29 下午09时58分07秒 CST> <Warning> <Deployer> <scapp2> <AdminServer> <[ACTIVE] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1383055087357> <BEA-149078> <Stack trace for message 149004
weblogic.application.ModuleException: [HTTP:101216]Servlet: "pushlet" failed to preload on startup in Web application: "mxdl.war".
java.lang.NullPointerException
at nl.justobjects.pushlet.servlet.Pushlet.init(Pushlet.java:94)
at javax.servlet.GenericServlet.init(GenericServlet.java:240)
at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:299)

出错代码为:
          SessionManager.getInstance().start();//此行代码报错,和此行代码相关的代码如下
        
/**
 * Singleton pattern: get single instance.
 */
public static SessionManager getInstance() {
return instance;
}
     
public class SessionManager implements ConfigDefs { /**
 * Singleton pattern:  single instance.
 */
private static SessionManager instance; static {
// Singleton + factory pattern:  create single instance
// from configured class name
try {
instance = (SessionManager) Config.getClass(SESSION_MANAGER_CLASS, "nl.justobjects.pushlet.core.SessionManager").newInstance();
Log.info("SessionManager created className=" + instance.getClass());
} catch (Throwable t) {
Log.fatal("Cannot instantiate SessionManager from config", t);
}
} weblogic  多节点 分布式 单例java

解决方案 »

  1.   

    SessionManager
    实例没拿到,能单步跟踪么
      

  2.   

    是部署的时候报错,所以应该没法跟踪吧?很奇怪的是,如果单独部署到一台机器上的weblogic里,没有问题。如果部署到多个节点的weblogic服务里,报错,我怀疑和单例模式有关。继续等……
      

  3.   

    Weblogic 也有单例服务的概念 - 集群中只有一个实例,其他的服务器作为客户端对此实例进行访问。
    你去看看 Weblogic 的 Singleton Master。