Bonjour à tous,
Je viens vers vous car je n'arrive pas à utiliser un EJB3 malgré lecture de nombreux tutoriel. J'ai 2 erreurs suivant la méthode que j'utilise
Mon EJB et le client tourne sur la même machine pour le moment.
Voici tout d'abord la structure du projet contenant les EJB :
EJB_API
- com....... IOrganizationDAO -> mon interface
- com........OrganizationDAO -> mon ejb
voici le code de mon interface :
Voici le code de mon ejb :package com.ste.pris.organization.dao.api;
import java.util.List;
import javax.ejb.Local;
import com.ste.pris.organization.model.api.IProductBu;
import com.ste.pris.organization.model.api.IProductDivision;
import com.ste.pris.organization.model.api.IProductGroup;
@Local
public interface IOrganizationDAO {
IProductGroup getIProductGroup(String code);
IProductDivision getIProductDivision(String code);
IProductBu getIProductBu(String code);
List<IProductGroup> getAllIProductGroup();
List<IProductDivision> getAllIProductDivisionFromGrp(String grpCode);
List<IProductBu> getAllIProductBuFromDiv(String divCode);
}
Ce projet une fois compilé avec Maven me donne 2 jar :package com.ste.pris.organization.dao.impl;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.ste.pris.organization.dao.api.IOrganizationDAO;
import com.ste.pris.organization.model.api.IProductBu;
import com.ste.pris.organization.model.api.IProductDivision;
import com.ste.pris.organization.model.api.IProductGroup;
import com.ste.pris.organization.model.impl.ProductBu;
import com.ste.pris.organization.model.impl.ProductDivision;
import com.ste.pris.organization.model.impl.ProductGroup;
@Stateless
public class OrganizationDAO implements IOrganizationDAO {
@PersistenceContext
private EntityManager entityManager;
public OrganizationDAO(){}
public OrganizationDAO(EntityManager entityManager){
this.entityManager = entityManager;
}
@Override
public IProductGroup getIProductGroup(String code){
return entityManager.find(ProductGroup.class,code);
}
@Override
public IProductDivision getIProductDivision(String code){
return entityManager.find(ProductDivision.class,code);
}
@Override
public IProductBu getIProductBu(String code){
return entityManager.find(ProductBu.class,code);
}
@SuppressWarnings("unchecked") @Override
public List<IProductGroup> getAllIProductGroup(){
return (List<IProductGroup>) entityManager.createQuery("From ProductGroup p Where p.activityStatus != '90' ").getResultList();
}
@SuppressWarnings("unchecked") @Override
public List<IProductDivision> getAllIProductDivisionFromGrp(String grpCode){
return (List<IProductDivision>) entityManager.createQuery("From ProductDivision p Where p.activityStatus != '90' and p.productGroup = '"+grpCode+"'").getResultList();
}
@SuppressWarnings("unchecked") @Override
public List<IProductBu> getAllIProductBuFromDiv(String divCode){
return (List<IProductBu>) entityManager.createQuery("From ProductBu p Where p.activityStatus != '90' and p.productDivision = '"+divCode+"'").getResultList();
}
}
pris_api-1.0.jar contenant les interfaces + les ejb
et une version cliente me donnant que les interface :
pris_api-1.0-client.jar
Voici les 2 essais coté client
Celui ci me donne un nullPointerException sur la ligne du print.package com.ste.crw.bean.form;
import javax.ejb.EJB;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Startup;
import com.ste.pris.organization.dao.api.IOrganizationDAO;
@Name("TestBean")
@Scope(ScopeType.SESSION)
@AutoCreate
@Startup
public class TestBean {
@EJB
private IOrganizationDAO organization;
public void test(){
try {
//InitialContext ctx = new InitialContext();
//IOrganizationDAO organization = (IOrganizationDAO) ctx.lookup("OrganizationDAO/local");
System.out.println(organization.getIProductGroup("11").getDescr());
} catch (Exception e){
e.printStackTrace();
}
}
}
Je précise que le jar déployé sur le seveur me monte bien l'EJB et le nomme : OrganizationDAO
J'ai donc essayé plusieurs annotation tel que :
Ceci ne change rien , toujours Null Pointeur@EJB(name="OrganizationDAO/local")
@EJB(beanName="OrganizationDAO/local")
@EJB(mappedName="OrganizationDAO/local")
Le deusième essais réalisé était le suivant :
Le résultat obtenu est un ClassCastException $proxy.......package com.ste.crw.bean.form;
import javax.ejb.EJB;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Startup;
import com.ste.pris.organization.dao.api.IOrganizationDAO;
@Name("TestBean")
@Scope(ScopeType.SESSION)
@AutoCreate
@Startup
public class TestBean {
public void test(){
try {
InitialContext ctx = new InitialContext();
IOrganizationDAO organization = (IOrganizationDAO) ctx.lookup("OrganizationDAO/local");
System.out.println(organization.getIProductGroup("11").getDescr());
} catch (Exception e){
e.printStackTrace();
}
}
}
Je precise que le jar client à été utilisé pour compiler avec maven pour projet client
Avez vous une idée de comment résoudre se problème
Merci d'avance
Leod
Partager