EJB3.x(JBoss) 第一天
参照itcast的视频教程开始了我的EJB学习,写了第一个Stateless的Remote的Bean
/** * */ package com.cqzhu.ejb3; /** * @author PowerLinux * */ public interface HelloWorld { public String sayHello(String name); }
/** * */ package com.cqzhu.ejb3.impl; import javax.ejb.Remote; import javax.ejb.Stateless; import com.cqzhu.ejb3.HelloWorld; /** * @author PowerLinux * */ @Stateless @Remote(HelloWorld.class) public class HelloWorldBean implements HelloWorld { /* (non-Javadoc) * @see com.cqzhu.ejb3.HelloWorld#sayHello(java.lang.String) */ @Override public String sayHello(String name) { // TODO Auto-generated method stub return name+"Say Hello,World!"; } }
client:
package com.cqzhu.ejb3.test; import java.util.Properties; import javax.naming.InitialContext; import javax.naming.NamingException; import com.cqzhu.ejb3.HelloWorld; public class EJBClient { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Properties props = new Properties(); props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); props.setProperty("java.naming.provider.url", "localhost:1099"); try { InitialContext ctx = new InitialContext(); HelloWorld helloworld = (HelloWorld)ctx.lookup("HelloWorldBean/Remote"); System.out.println(helloworld.sayHello("PowerLinux ")); } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
运行:
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.cqzhu.ejb3.test.EJBClient.main(EJBClient.java:24)
出错原因:
InitialContext ctx = new InitialContext();初始化出错,应为:
InitialContext ctx = new InitialContext(props);
再次运行:
javax.naming.NameNotFoundException: Remote not bound
出粗原因:
HelloWorld helloworld = (HelloWorld)ctx.lookup("HelloWorldBean/Remote");应为:
HelloWorld helloworld = (HelloWorld)ctx.lookup("HelloWorldBean/remote");
运行:
PowerLinuxSay Hello,World!