返回远程EJB

时间:2017-04-21 01:40:09

标签: java-ee collections ejb serializable

我有一个带有远程接口的EJB模块和一个企业应用程序客户端(带有包含所有远程EJB接口的库)。当我从客户端的远程EJB调用任何业务方法时,一切正常,除非EJB必须返回一个对象数组。

所以转移一个字符串工作正常,但是当我尝试发送一个字符串阵列时它不会工作。

关于这个的任何想法???我需要像这样创建一个Serializable对象吗?或什么?:

public class ArrayStrings () implements Serializable{
         private String[] arrayS;
         ...
}

我不知道如何在远程ejb调用中传递数组。有什么想法吗?

查找我的代码:

@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;
}

}

然后是我的远程接口(位于客户端类路径中的jar库中):

@Remote
public interface CategoryManagementRemote {
    Category findCategoryByName (String name);
    List<String> getProductCollectionGivenCategory (String name);
}

最后我从CategoryManagementRemote接口调用一个方法来打印出客户端中的字符串数组:

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

顺便说一下,我不会产生任何错误(我想try / catch在尝试读取字符串列表时会捕获异常)。但列表没有打印出来。 (我没有收到客户端中的字符串列表(当只发送1个单独的字符串时)

1 个答案:

答案 0 :(得分:0)

解决!在我的情况下,我禁用编织,现在可以使用