我有一个带有远程接口的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个单独的字符串时)
答案 0 :(得分:0)
解决!在我的情况下,我禁用编织,现在可以使用