2017-04-21 4 views
0

私は、リモートインタフェースを持つEJBモジュールと、(すべてのリモート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); 
} 

そして最後にI CategoryManagementRemoteインターフェイスのメソッドを呼び出して、クライアントのString配列を出力するだけです。

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

機能するようになりましたあなたが得る実際のエラーを表示してください。リモートインタフェースと実際のEJBからのメソッド宣言 –

+0

'getProductCollectionGivenCategory'はNullPointerExceptionを引き起こすバグを持っているようです...捕まえられた例外をそれを飲み込むのではなくログに記録した場合、それを見たことがあります。 –

+0

Eclipseのリンクを使って、この私の答えを見てみよう、私は何が間違っていたのかを調べるのに何日も費やしました:http://stackoverflow.com/questions/36112224/jpa-entity-is-not-correctly-passed- from-ejb-to-presentation-tier/37249863#37249863 – Leonardo

答えて

0

を文字列のリストを受信して​​いない解決!私の場合はI無効に織り、それは

+0

私はまだ物事が期待どおりに機能していなかった理由を見つけるために、当時の欲求不満を覚えています!もう1つの提案は、JPA実装としてHibernateを使用することです。 – Leonardo

関連する問題