如何从My Web APP With Enterprise App访问本地EJB模块

时间:2013-04-01 08:42:12

标签: java-ee ejb

我有JSF托管bean(它的名字= indexbean1)和它的代码如下:

 package ir.ac.imamreza.Client;

 import ir.ac.imamreza.common.ProductServiceLocal;
 import javax.ejb.EJB;
 import javax.inject.Named;
 import javax.enterprise.context.RequestScoped;
 import javax.naming.InitialContext;

 /**
 *
 * @author Avarcom
 */
 @Named(value = "indexbean1")
 @RequestScoped
 public class Indexbean1 {
 private String name;
 private int price;
 private int count;
 private String desc;

    public int getCount() {
        return count;
    }

    public String getDesc() {
        return desc;
    }

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }



    public void setCount(int count) {
        this.count = count;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPrice(int price) {
        this.price = price;
    }


    @EJB
    private  ProductServiceLocal ProductService1;
    public void  Add()         
    {
        ProductService1.Add(name,price, count, desc);
    }

    public Indexbean1() {
    }
 }

我在Class Shop中有Class“ProductServiceLocal”的本地接口,如下所示:

package ir.ac.imamreza.common;

 import java.util.List;
 import javax.ejb.Local;

 /**
 *
 * @author One God
 */
 @Local
 public interface ProductServiceLocal {

    List<Product> getallproduct();
    public int BuyProduct(long id,long number);
    public void Add(String name, int price,int count,String desc);

 }
  ///////////////////////////

这就是My EJB模块在My EJB中实现我的Add方法

  ////////////////////


 package ir.ac.imamreza.Shop;
 import ir.ac.imamreza.common.Product;
 import ir.ac.imamreza.common.ProductServiceRemote;
 import java.math.BigDecimal;
 import java.sql.ResultSet;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import javax.ejb.Stateless;
 import java.sql.*; 

@Stateless(mappedName="ir.ac.imamreza.Shop.ProductService")
 public class ProductService implements ProductServiceLocal,ProductServiceRemote { 

    @Override
    public int BuyProduct(long id,long number)
    {
        int result;
         dataaccess da=new dataaccess();
         result=da.exec("update tbl_product set count=count-"+number+" where id='"+id+"'");
          da.Close();
         return result;
    }
     public void Add(String name, int price,int count,String desc)
      {
          dataaccess da=new dataaccess();
           da.exec("INSERT INTO tbl_product (name,count,price,Description) VALUES      
   ("+name+","+price+","+count+","+desc+")");
          da.Close();
      }

 }

我添加了我的EJB和MY WEB App以访问我的LOCAl方法(ADD),但是当我不想部署我的应用程序时,我面临以下错误:

SEVERE: Exception while deploying the app [WebClient] : Cannot resolve reference Local ejb-ref name=ir.ac.imamreza.Client.Indexbean1/ProductService1,Local 3.x interface =ir.ac.imamreza.common.ProductServiceLocal,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session
..

我认为我的Web APP无法连接到我的EJB,对于这个问题,我将Web APP和EJAB添加到One Enterprise APP,但我再次遇到这些错误, Plz请帮助我,谢谢

最好的问候

1 个答案:

答案 0 :(得分:0)

错误很清楚。在您的JSF中,您正在尝试不存在的基于字段的EJB注入。

现在,这是基于场的注射规则:

  

对于基于字段的资源注入,JNDI名称被解析为(包   + Classname)/(EJB注入变量名称),它试图在你的本地应用程序中查找(war,ear ..)。因此,在这种情况下,它正在得到解决   到(ir.ac.imamreza.Client)。(Indexbean1)/ ProductService1没有   存在于你的耳中或战争中。

此致 拉维