Jakarta ee 远程EJB中的返回数组/集合

Jakarta ee 远程EJB中的返回数组/集合,jakarta-ee,collections,ejb,serializable,Jakarta Ee,Collections,Ejb,Serializable,我有一个带有远程接口的EJB模块和一个企业应用程序客户端(带有一个包含所有远程EJB接口的库)。当我从客户机中的远程EJB调用任何业务方法时,除了EJB必须向我返回一个对象数组时,一切都正常工作 因此,传输字符串可以很好地工作,但当我尝试发送字符串数组时,它将不起作用 有什么想法吗???我需要像这样创建一个可序列化对象吗??还是什么 public class ArrayStrings () implements Serializable{ private String[] ar

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

因此,传输字符串可以很好地工作,但当我尝试发送字符串数组时,它将不起作用

有什么想法吗???我需要像这样创建一个可序列化对象吗??还是什么

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;
}
@无状态
公共类CategoryManagement扩展了AbstractFacade实现
类别管理远程{
@PersistenceContext(unitName=“onlinesupermarketejbpu”)
私人实体管理者;
@凌驾
受保护的EntityManager getEntityManager(){
返回em;
}
公共类别管理(){
超级(类别、类别);
}
@凌驾
公共类别findCategoryByName(字符串名称){
试一试{
Category c=(Category)em.createNamedQuery(“Category.findByName”).setParameter(“name”,name).getSingleResult();
对于(产品p:c.getProductCollection()){
System.out.println(p.getName());
}
返回c;
}catch(NullPointerException e){};
返回null;
}
@凌驾
公共列表getProductCollectionGivenCategory(字符串名称){
c类=findCategoryByName(名称);
List=null;
对于(产品p:c.getProductCollection()){
list.add(p.getName());
}
退货清单;
}
}

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

@Remote
公共接口类别管理远程{
类别findCategoryByName(字符串名称);
列出getProductCollectionGivenCategory(字符串名称);
}
最后,我从CategoryManagementRemote接口调用了一个方法来打印客户端中的字符串数组:

@Remote
public interface CategoryManagementRemote {
    Category findCategoryByName (String name);
    List<String> getProductCollectionGivenCategory (String name);
}
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){};
}
publicstaticvoidmain(字符串[]args){
试一试{
InitialContext c=新的InitialContext();
CategoryManagementRemote cm=(CategoryManagementRemote)
c、 查找(“java:global/On-lineSupermarketEJB/CategoryManagement”);
列表产品=
cm.getProductCollectionGivenCategory(“日记”);
对于(字符串p:listProducts){System.out.println(p);}
捕获(例外e){};
}

顺便说一句,我没有收到任何错误(我猜try/catch在尝试读取字符串列表时捕捉到异常)。但是列表没有打印出来。(我在客户端没有收到字符串列表(当只发送一个字符串时,它工作)

解决了!在我的例子中,我禁用了编织,现在可以工作了

请显示您从远程接口和实际EJBWell获得的实际错误和方法声明,
getProductCollectionGivenCategory
似乎有一个bug,它将导致NullPointerException…如果您记录捕获的异常而不是swallow你可能已经看到了。如果你正在使用Eclipse链接,试着看看我的答案,我花了好几天的时间试图找出问题所在:是的,问题似乎出在eclipselink编织上。你是如何修复静态编织@Leonardo???在我的情况下,它是一个非关键应用程序,所以我禁用了编织。对于静态编织我想看看其中一个例子是否适用于你:我仍然记得那些日子的挫折,试图找出事情没有按预期工作的原因!另一个建议是使用Hibernate作为JPA实现。