最近在学习 ejb开发
现在遇到个问题,就是 开发local的session bean过程中.
我先按照ejb规范写 好接口实现类 然后打成jar包.
然后我在创建一个web工程
然后将web工程放到jboss6.0里,然后将如上的本地session bean打成的jar包放到 jboss的 deploy目录下问题是 在web工程里我该怎么调用啊我是将 如上的session bean jar包放到 这个web项目的类类路径里
还是将 这个session bean 的接口放到 这个web项目的web/class 目录下
希望有人解答

解决方案 »

  1.   

    JNDI 查找,把 EJB 工程中的接口打个 jar 包给 WEB 工程用就可以了。如果你的 EJB 用的是 jar 部署的话,那么 JNDI 的名字就是:<EJB_IMPL_CLASS_SIMPLENAME>/[local|remote]EJB_IMPL_CLASS_SIMPLENAME: 是 EJB 实现类的不带包名的名字
      

  2.   

    我试了 还是不行报出错误是
    Exception in thread "main" javax.naming.NamingException: Could not dereference object [Root exception is java.lang.RuntimeException: Could not find proxyfactory at ProxyFactory/catservice/CatServiceBean/CatServiceBean/local -looking up local Proxy from Remote JVM?]
    at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1508)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:824)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:688)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at catservice.Test.main(Test.java:15)
    Caused by: java.lang.RuntimeException: Could not find proxyfactory at ProxyFactory/catservice/CatServiceBean/CatServiceBean/local -looking up local Proxy from Remote JVM?
    at org.jboss.ejb3.proxy.impl.objectfactory.ProxyObjectFactory.getObjectInstance(ProxyObjectFactory.java:150)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
    at org.jnp.interfaces.NamingContext.getObjectInstance(NamingContext.java:1483)
    at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1500)
    ... 4 more
    Caused by: org.jboss.ejb3.common.registrar.spi.NotBoundException: Could not retrieve Ejb3Registrar as a registrar implementation has not yet been bound.
    at org.jboss.ejb3.common.registrar.spi.Ejb3RegistrarLocator.locateRegistrar(Ejb3RegistrarLocator.java:85)
    at org.jboss.ejb3.proxy.impl.objectfactory.ProxyObjectFactory.getObjectInstance(ProxyObjectFactory.java:140)
    ... 7 more
    我怀疑是jar包的问题
    因为 我用的 jboss版本是jboss-6.0.0.Final
    我把client中的所有jar包导进去就会报错 但是如果只导入
    jnp-client,jboss-logging,jbossall-client
    就会报出
    Exception in thread "main" java.lang.ClassCastException: javax.naming.Reference cannot be cast to catservice.CatService
    at catservice.Test.main(Test.java:15)这个错误 我知道 是缺少jar包 
    求我到底该导入什么jar包 谢谢大侠了!!!!
      

  3.   

    public abstract class GenericEJBTestCase {
    public  static InitialContext ctx; 
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
    Properties props = new Properties();
    props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
    props.setProperty("java.naming.provider.url", "localhost:1099");
    ctx = new InitialContext(props);
    }


        @AfterClass
    public static void setUpAfterClass()throws Exception{
    ctx.close();
    }


    }public class TestSuitExample extends GenericEJBTestCase {
    IInterface interfaceexample;
    @Before
    public void BeforeTestExample()throws Exception{
    interfaceexample=(接口) ctx.lookup("EJB名称(查看Jboss)"); }

    @Test
    public void TestExample()throws Exception{
    //Test code
    }
      

  4.   

    好吧 我把问题简化下.
     现在唯一的问题就是: 我用的 jboss的版本是    jboss-6.0.0.Final
    我需要哪些 client下的jar 
    或者告诉我该怎么去找?????
      

  5.   

    public abstract class GenericEJBTestCase {
        public  static InitialContext ctx; 
        @BeforeClass
        public static void setUpBeforeClass() throws Exception {
            Properties props = new Properties();
            props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
            props.setProperty("java.naming.provider.url", "localhost:1099");
            ctx = new InitialContext(props);
        }
        
        
        @AfterClass
        public static void setUpAfterClass()throws Exception{
            ctx.close();
        }
        
        
    }
    EJB暂时还没用过
      

  6.   


    请问 打成ear包有什么效果????
    现在我的 问题很明确 就是 session bean local 需要 jboss6.0.final client目录下的哪些jar包
      

  7.   


    package catservice;import java.util.HashMap;
    import java.util.Map;import javax.ejb.Stateless;@Stateless
    public class CatServiceBean implements CatService {
    static Map<Integer,Cat[]> catsInfo;
    static {
    catsInfo=new HashMap<Integer,Cat[]>();
    catsInfo.put(1, new Cat[]{
    new Cat(1,"donkey"),
    new Cat(2,"shrek"),
    });
    }
    @Override
    public Cat[] getCats(Integer number) {
    Cat[] cats=catsInfo.get(number);
    for(Cat cat:cats){
    System.out.println("--------------------");
    System.out.println("宠物的姓名是:"+cat.getName());
    System.out.println("宠物年龄是"+cat.getAge());
    System.out.println("--------------------");
    }
    return cats;

    }
    }如上 如果返回的 是 Cat[] 就会报错 说
    java.lang.ClassCastException: [Lcatservice.Cat; cannot be cast to [Lcatservice.Cat;
    $Proxy136.getCats(Unknown Source)这个是local session bean 我真是要疯掉了 实在不知道 这到底是什么情况!!!!!!!