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很多属性的吧? 应该怎么写啊?请指教了。
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());
} }}
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);
}
// 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文件要配好.
props.put(Context.SECURITY_PRINCIPAL, "admin"); //用户名
props.put(Context.SECURITY_CREDENTIALS, "pwd"); //密码
还有 ic = new InitialContext(props);//要把设置好的参数传入,本地调用不需要参数
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");