代码之家  ›  专栏  ›  技术社区  ›  sharique Khan

应用程序从weblogic 10.2.0迁移到jboss 6.1.0

  •  0
  • sharique Khan  · 技术社区  · 10 年前

    我是Jboss服务器的新手。我正在将J2ee应用程序从Weblogic 10.2迁移到JBoss EAP 6.1.0。迁移时,我收到以下错误消息。如果有人知道解决方案,请提供帮助。

    应用程序成功地部署在服务器上,但当我尝试通过localhost访问应用程序时,它会引发NullPointerException。

    错误消息:

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2)java.lang.NullPointerException

    17: 34:16811 javax.naming.NameImpl.(NameImpl.java:264)处的错误[stderr](http://localhost/127.00.1:8080-2)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2)位于javax.nameing.CompositeName。(CompositeName.java:214)

    17: 34:16811 org.jboss.as.naming.util.NameParser.parse(NameParser.java:49)处的错误[stderr](http://localhost/127.0.0.1:8080-2)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2)位于org.jboss.as.naming.NamingContext.parseName(NamingContext.java:491)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2)位于org.jboss.as.nameing.NamingContext.lockup(NamingContext.java:183)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2)位于org.jboss.as.nameing.NamingContext.lockup(NamingContext.java:179)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2)位于javax.nameing.InitialContext.lockup(InitialContext.java:392)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2),位于com.trirecta.pfizer.dao.UserProfileDAO.populate(UserProfileDAO.java:51)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2),位于com.trirecta.pfizer.servlet.PfizerSiteController.doFilter(PfizerSiteController.java:394)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2),位于com.trirecta.pfizer.servlet.PfizerSiteController.performTask(PfizerSiteController.java:163)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2),位于com.trirecta.pfizer.servlet.PfizerSiteController.doPost(PfizerSiteController.java:546)

    17: 34:16811 javax.servlet.http.HttpServlet.service(HttpServlet.java:754)处的错误[stderr](http://localhost/127.00.1:8080-2)

    17: 34:16811 javax.servlet.http.HttpServlet.service(HttpServlet.java:847)处的错误[stderr](http://localhost/127.0.0.1:8080-2)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2),位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2)位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2),位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2),位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2),位于org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2),位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2),位于org.apache.catalina.vvales.ErrorReportValve.invoke(ErrorReportValval.java:97)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2),位于org.apache.catalina.core.StandardEnginealve.invoke(StandardEnginealve.java:102)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2)位于org.apache.catalina.connecter.CoyoteAdapter.service(CoyoteAdapter.java:336)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2)位于org.apache.coyote.http11.Http11Processor.processe(Http11Processor.java:856)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2)位于org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)

    17: 34:16811错误[stderr](http://localhost/127.00.1:8080-2)位于org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920)

    17: 34:16811 java.lang.Thread.run(Thread.java:619)处的错误[stderr](http://localhost/127.00.1:8080-2)

    请帮我解决这个问题?

    代码:

    try
            {
    
                if(sqlHome == null)
                {
                /*  Properties jndiProps = new Properties(); 
                    jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
                    jndiProps.put(Context.PROVIDER_URL,"jnp://localhost:9990"); 
                    jndiProps.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
            */      // create a context passing these properties 
    
                    Context ctx = new InitialContext(); 
                    System.out.println("check1...");
                    //Object obj = ctx.lookup("SQLHelperSFOHome");
    
                    //java:app/SQLHelperSFO             
                    System.out.println("check2...");
    
                    //sqlHome=(SQLHelperSFOHome)PortableRemoteObject.narrow(obj,SQLHelperSFOHome.class);
    
                    //System.out.println(PortableRemoteObject.narrow(ctx.lookup("SQLHelperSFOHome"),SQLHelperSFOHome.class).toString()+"2");
                    sqlHome = (SQLHelperSFOHome)PortableRemoteObject.narrow(ctx.lookup("SQLHelperSFOHome"),SQLHelperSFOHome.class);
                }
                sqlsfo = sqlHome.create();
                sqlsfo.initialize(DATASOURCE_JNDINAME);
    
            }
            catch(Exception e)
            {
                e.printStackTrace();
                throw new DataAccessException("UserProfileDAO","populate",e.getMessage());
            }
    

    我尝试用以下方式更改初始上下文:

    Properties jndiProps = new Properties(); 
                        jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
                        jndiProps.put(Context.PROVIDER_URL,"jnp://localhost:9990"); 
                        jndiProps.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
    
    Context ctx = new InitialContext(jndiProps);
    

    此外,此方法中使用的sysout语句不会显示在控制台上。

    1 回复  |  直到 10 年前
        1
  •  0
  •   sharique Khan    10 年前

    而不是使用

    ctx.lookup("EJBclassName");
    

    我们使用了:

    ctx.lookup("java:global/EARname/EJBprojectName/EJBclassName!AbsoluteNameOfEJBClass");
    

    它奏效了。