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 :

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);

}
Voici le code de mon ejb :
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();
}

}
Ce projet une fois compilé avec Maven me donne 2 jar :
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

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();
}

}

}
Celui ci me donne un nullPointerException sur la ligne du print.
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 :

@EJB(name="OrganizationDAO/local")
@EJB(beanName="OrganizationDAO/local")
@EJB(mappedName="OrganizationDAO/local")
Ceci ne change rien , toujours Null Pointeur

Le deusième essais réalisé était le suivant :

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();
}

}

}
Le résultat obtenu est un ClassCastException $proxy.......

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