J'ai un module EJB avec une interface distante et un Enterprise Application Client (avec une bibliothèque qui inclut toutes les interfaces EJB distantes). Tout fonctionne correctement quand j'appelle n'importe quelle méthode d'affaires de l'EJB distant dans le client, excepté quand l'EJB doit me renvoyer un tableau d'objets. Donc, le transfert d'une chaîne fonctionne très bien, MAIS IL NE FONCTIONNERA PAS LORSQUE JE ESSAYE D'ENVOYER UN ENSEMBLE DE CORDES.retour tableau/collection dans EJB distant
Des idées sur ce ??? Ai-je besoin de créer un objet sérialisable comme celui-ci ?? ou quoi ?:
public class ArrayStrings() implements Serializable{
private String[] arrayS;
...
}
Je ne sais pas comment puis-je passer un tableau dans un appel ejb à distance. Des idées?
Trouver beuglement mon code:
@Stateless
public class CategoryManagement extends AbstractFacade<Category> implements
CategoryManagementRemote {
@PersistenceContext(unitName = "On-lineSupermarketEJBPU")
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public CategoryManagement() {
super(Category.class);
}
@Override
public Category findCategoryByName (String name){
try{
Category c= (Category)em.createNamedQuery("Category.findByName").setParameter("name", name).getSingleResult();
for (Product p: c.getProductCollection()){
System.out.println(p.getName());
}
return c;
}catch(NullPointerException e){};
return null;
}
@Override
public List<String> getProductCollectionGivenCategory (String name){
Category c = findCategoryByName (name);
List<String> list=null;
for(Product p: c.getProductCollection()){
list.add(p.getName());
}
return list;
}
}
Ensuite, mon interface distante (qui est dans une bibliothèque jar dans le classpath du client):
@Remote
public interface CategoryManagementRemote {
Category findCategoryByName (String name);
List<String> getProductCollectionGivenCategory (String name);
}
Et enfin, je appelez une méthode de l'interface CategoryManagementRemote pour simplement imprimer le tableau de chaînes dans le client:
public static void main(String[] args){
try{
InitialContext c = new InitialContext();
CategoryManagementRemote cm = (CategoryManagementRemote)
c.lookup("java:global/On-lineSupermarketEJB/CategoryManagement");
List<String> listProducts=
cm.getProductCollectionGivenCategory("Diary");
for (String p: listProducts){System.out.println(p);}
catch(Exception e){};
}
BTW I NE PAS OBTENIR D'ERREUR (Je suppose que le try/catch attrape l'exception en essayant de lire la liste des chaînes). Mais la liste n'est pas imprimée. (Je ne reçois pas la liste des chaînes dans le client (quand juste envoyer 1 seule chaîne cela fonctionne)
S'il vous plaît montrer l'erreur réelle que vous obtenez et Les déclarations de méthode de l'interface distante et l'EJB réel –
Eh bien, 'getProductCollectionGivenCategory' semble avoir un bogue qui se traduira par une exception NullPointerException ... Si vous avez consigné votre exception interceptée au lieu de l'avaler, vous l'avez peut-être vu –
Si vous êtes en utilisant le lien Eclipse, essayez de regarder cette réponse à moi, j'ai passé des jours à essayer de trouver ce qui n'allait pas: http://stackoverflow.com/questions/36112224/jpa-entity-is-not-correctly-passed- de-ejb-to-presentation-tier/37249863 # 37249863 – Leonardo