我在MyEclipse6.5中编写了一个简单的无状态Session Bean,只包含了一个接口和一个类,代码如下:package session;import javax.ejb.Stateless;
import java.util.*;@Stateless
public class FirstSession implements FirstSessionRemote
{
public String getTime()
{
Formatter fmt = new Formatter();
Calendar cal = Calendar.getInstance();
fmt.format("%tr", cal);
return fmt.toString();
}   
}
     package session;import javax.ejb.Remote;@Remote
public interface FirstSessionRemote  extends java.io.Serializable
{
public String getTime();}
     使用MyEclipse6.5将EJB发布到weblogic10,进入weblogic10后查看也成功发布了,如下图
    但客户端在调用时jndi是session.FirstSessionRemote吗?调用代码如下:import javax.naming.*;
import session.*;
import java.util.*;
import javax.ejb.EJB;public class Client
{
public static InitialContext getInitialContextForWeblogic()
throws NamingException
{
InitialContext ctx = null;
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL, "t3://localhost:7001");
return new javax.naming.InitialContext(p); } @EJB
private static FirstSessionRemote first; // injected field must be static
public static void main(String args[]) throws Exception
{
try
{
Context jndiContext = getInitialContextForWeblogic();

Object ref = jndiContext
.lookup("session.FirstSessionRemote");
System.out.println("aa");
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
    在执行上面的代码后,将抛出如下的异常:While trying to lookup 'session.FirstSessionRemote' didn't find subcontext 'session'. Resolved ''
不知客户端是这样调用远程的EJB3.0的服务吗

解决方案 »

  1.   

    import javax.naming.Context;
    import javax.naming.InitialContext;
    public class Client
    {
        public static void main(String [] args)
        {
            Context context = new InitialContext();
            CalculateEJB ejb =
                  (CalculateEJB)context.lookup("java:comp/env/ejb/CalculateEJB");
           myejb.incrementValue();
        }
    } 另外,在www.itstudy8.org上有很多关于EJB3.0的电子书(英文),你可以参考一下
      

  2.   

    @Stateless 改为
    @Stateless (mappedName="for")调用时用lookup("for#session.FirstSessionRemote"); 
    试试