public class Test { /**
 * @param args
 */
public static void main(String[] args) { Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
props.put(Context.PROVIDER_URL, "localhost:4848");
InitialContext ic = null;
try {
ic = new InitialContext();
Object homeObj = ic.lookup("AdviceBean");
} catch (NamingException e) {
e.printStackTrace();
}
}
}我在本机打包了一个 ejb  使用 GlassFish 部署了。现在 想写一个 单独控制台应用程序 调用它,可是不会写。
Properties props = new Properties();
申明这个以后还要set很多属性的吧? 应该怎么写啊?请指教了。

解决方案 »

  1.   

    随便找本EBJ的书,上面都有介绍上GOOGLE查一下EBJ的教程吧,都有例子的
      

  2.   

    这是我按照传智视频做的例子 不知道对你有帮组没  props.setPropertyimport java.util.Properties;import javax.naming.InitialContext;
    import javax.naming.NamingException;import ejb3.HelloWorld;public class EJBClient {
    public static void main(String[] args) {

    Properties props = new Properties();

    props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
    //JNDI连接工厂

    props.setProperty("java.naming.provider.url", "localhost:1099");
    //服务器地址端口

    //可以新建 JNDI.properties文件    下面可以再jboss主页上找到发布的jar包
    //   http://localhost:8080/jmx-console/    访问jboss主页 ->jboss->service=JNDIView->
    //   list Invoke按钮 ->Global JNDI Namespace  ->  +- HelloWorldBean (class: org.jnp.interfaces.NamingContext) try {
    InitialContext ctx = new InitialContext(props);
    HelloWorld helloworld = (HelloWorld)ctx.lookup("HelloWorldBean/remote") ;

    //   打包成jar的      全局JNDI名称
    //   EJB-CLASS-NAME/local    
    //   EJB-CLASS-NAME/remote  例如  HelloWorldBean/remote

    //   打包成ear的   全局JNDI名称
    //   EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local
    //   EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote   例如  打包成   haha.ear   haha/HelloWorldBean/remote



    System.out.println(helloworld.sayHello("KingZ"));


    } catch (NamingException e) {

    System.out.println(e.getMessage());
    } }}
      

  3.   

    前面的2个类 也给你贴一下package ejb3.impl;import javax.ejb.Remote;
    import javax.ejb.Stateless;import ejb3.HelloWorld;@Stateless
    @Remote(HelloWorld.class)
    public class HelloWorldBean implements HelloWorld { public String sayHello(String name) {
    // TODO Auto-generated method stub
    return name+"说 :你好 ,世界!";
    }}
    package ejb3;public interface HelloWorld { public String sayHello (String name);

    }
      

  4.   

    Properties props = new Properties();
         // jobss调用方法
         props.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
         props.put(Context.PROVIDER_URL, "jnp://localhost:1099");
        
         Context ctx = new InitialContext(props);
                CountHome home = (CountHome)javax.rmi.PortableRemoteObject.narrow(ctx.lookup("examples/CountHome"), CountHome.class);
                
                /*
                 * An array to hold the Count EJB Objects
                 */
                Count count[] = new Count[noOfClients
    jboss中调用的方法,其他的容器也差不多.
    ejb-xml,jboss.xml文件要配好.
      

  5.   

    把那个bean直接当普通类来调用 就行了.
      

  6.   

    class Properties extends java.util.Hashtable<Object,Object> implements Serializable, Cloneable, Map<Object,Object> {}lz查下api就知道应该怎么写了。
      

  7.   

    远程访问应该需要用户名密码
    props.put(Context.SECURITY_PRINCIPAL, "admin");   //用户名
    props.put(Context.SECURITY_CREDENTIALS, "pwd");   //密码
    还有 ic = new InitialContext(props);//要把设置好的参数传入,本地调用不需要参数
      

  8.   

    参考:EJB3.0开发
      

  9.   

    props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
                props.setProperty("java.naming.provider.url", "localhost:1099");
                props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");