是否忘记对"ejb/ProgrammerBMP"进行配置

解决方案 »

  1.   

    把jndi naming factory的名字和jndi url写到一个叫jndi.properties的文件里,放到classpath。或者运行程序的时候把他们加到环境变量里。还有一个办法,把他们放到perperties里面,加到initialcontext里。
      

  2.   

    我把程序改过后:
    /*
     * Created on 2006-4-27
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    package com.liuyang.bmp.programmer.client;import java.util.Collection;
    import java.util.Iterator;
    import java.util.Properties;import javax.naming.Context;
    import javax.naming.InitialContext;import com.liuyang.bmp.interfaces.ProgrammerBMP;
    import com.liuyang.bmp.interfaces.ProgrammerBMPHome;public class ProgrammerClient { public static void main(String[] args) throws Exception {

    Properties p = new Properties();
    p.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
    p.put(Context.URL_PKG_PREFIXES, "jboss.naming:org.jnp.interfaces");
        p.put(Context.PROVIDER_URL, "127.0.0.1:1009"); 
        InitialContext ctx = new InitialContext(p);
    Object ref  = ctx.lookup("ejb/ProgrammerBMP");
    ProgrammerBMPHome home = (ProgrammerBMPHome)ref;
    ProgrammerBMP liuyang = home.create("liuyang",25,"java","jboss");
    ProgrammerBMP weifei = home.create("weifei",25,"java","eclipse");
    Collection all = home.findByLanguage("java");
    if((all!=null)&&(!all.isEmpty())){
    Iterator it = all.iterator();
    while(it.hasNext()){
    ProgrammerBMP bmp = (ProgrammerBMP) it.next();
    System.out.println(bmp.getName()+":"+bmp.getTool());
    }
    }
    }
    }
    但运行后也出现了错误:
    log4j:WARN No appenders could be found for logger (org.jnp.interfaces.NamingContext).
    log4j:WARN Please initialize the log4j system properly.
    javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out]
    at org.jnp.interfaces.NamingContext.discoverServer(NamingContext.java:1302)
    at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1382)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:579)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
    at javax.naming.InitialContext.lookup(InitialContext.java:347)
    at com.liuyang.bmp.programmer.client.ProgrammerClient.main(ProgrammerClient.java:28)
    Caused by: java.net.SocketTimeoutException: Receive timed out
    at java.net.PlainDatagramSocketImpl.receive(Native Method)
    at java.net.DatagramSocket.receive(DatagramSocket.java:711)
    at org.jnp.interfaces.NamingContext.discoverServer(NamingContext.java:1272)
    ... 5 more
    Exception in thread "main" 
    这是什么原因啊??