困扰了三天三夜啊!尝试写第一个EJB遇到的问题
主接口
package simpleBean;
public interface SalaryHome extends javax.ejb.EJBHome{
Salary create() throws java.rmi.RemoteException,javax.ejb.CreateException;
}
组件接口
package simpleBean;
public interface Salary extends javax.ejb.EJBObject{
double calculateSalary(int annualSalary,int pensionContrib,double bonus)
throws java.rmi.RemoteException;
}
实现类
package simpleBean;
import javax.ejb.*;
public class SalaryEJB implements SessionBean{
public void ejbCreate(){}
public void ejbRemove(){}
public void ejbActivate(){}
public void ejbPassivate(){}
public void setSessionContext(SessionContext ctx){}
private static double taxRate=28;
public double calculateSalary(int annualSalary,int pensionContrib,double bonus){
double monthly=0;
monthly=annualSalary/12;
monthly=monthly+bonus;
monthly=monthly-(monthly*(pensionContrib/100));
monthly=monthly-(monthly*(taxRate/100));
return monthly;
}
}
编写描述文件
用SUN的J2EE服务器进行部署
1.用File->New Application创建新的Application
2.add to application->EJB jar添加打包好的JAR文件
3.用Tools-deploy部署
编写客户端访问EJB
import javax.ejb.*;
import simpleBean.*;
import javax.naming.InitialContext;
class SalaryClient{
public static void main(String[] args){
try{
InitialContext ctx=new InitialContext();
Object objRef=ctx.lookup("Salary");
SalaryHome home=(SalaryHome)javax.rmi.PortableRemoteObject.narrow(
objRef,SalaryHome.class);
Salary bean=home.create();
System.out.println("Monthly net salary: "+
bean.calculateSalary(28000,2,500));
}
catch (javax.naming.NamingException ne){
System.out.println("Naming Exception caught: "+ne);
}
catch (javax.ejb.CreateException ce){
System.out.println("Create Exception caught: "+ce);
}
catch (java.rmi.RemoteException re){
System.out.println("Remote Exception caught: "+re);
}
}
}
出现如下错误:
D:\salary\client>java -classpath %J2EE_HOME%\lib\j2ee.jar;SimpleBeanClient.jar;.
SalaryClient
Naming Exception caught: 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
我在网上找了好长时间,也没有发现解决方法,请高人帮忙指点,感谢!