2012-01-17 5 views
0

私はJ2EE/EJBフィールドの初心者です。JSPモジュールによって呼び出されるステートレスリモートEJB3モジュールを使用して簡単なプロジェクトを展開して実行しようとしています。Glassfishサーバーを使用してJSPからリモートEJB3にアクセス

ここであなたは私の豆のコードを持っている私の豆ここ

package converter.ejb; 

import java.math.BigDecimal; 

import javax.ejb.Remote; 

@Remote 
public interface Converter { 
    public BigDecimal dollarToYen(BigDecimal dollars); 

    public BigDecimal yenToEuro(BigDecimal yen); 
} 

のリモートビジネスインタフェースを持っている:

package converter.ejb; 

import java.math.BigDecimal; 
import javax.ejb.Stateless; 

@Stateless 
public class ConverterBean implements Converter { 
    private BigDecimal yenRate = new BigDecimal("83.0602"); 
    private BigDecimal euroRate = new BigDecimal("0.0093016"); 

    @Override 
    public BigDecimal dollarToYen(BigDecimal dollars) { 
     BigDecimal result = dollars.multiply(yenRate); 
     return result.setScale(2, BigDecimal.ROUND_UP); 
    } 

    @Override 
    public BigDecimal yenToEuro(BigDecimal yen) { 
     BigDecimal result = yen.multiply(euroRate); 
     return result.setScale(2, BigDecimal.ROUND_UP); 
    } 
} 

これらの2つのクラスがパッケージ「converter.ejb」で展開されていますjarファイル "converter-ejb.jar"

このJSPページからBeanにアクセスしたいと思います。

別のjarファイル "converter-jsp.jar"にデプロイされている210
<%@page import="java.util.Properties"%> 
<%@ page import="converter.ejb.Converter,java.math.*,javax.naming.*"%> 

<%!private Converter converter = null; 

    public void jspInit() { 
     try { 

      InitialContext ic = new InitialContext(); 
      converter = (Converter) ic.lookup(Converter.class.getName()); 
     } catch (Exception ex) { 
      System.out.println("Couldn't create converter bean." 
        + ex.getMessage()); 
     } 
    } 

    public void jspDestroy() { 
     converter = null; 
    }%> 
<html> 
<head> 
<title>Converter</title> 
</head> 

<body bgcolor="white"> 
    <h1>Converter</h1> 
    <hr> 
    <p>Enter an amount to convert:</p> 
    <form method="get"> 
     <input type="text" name="amount" size="25"> <br> 
     <p> 
      <input type="submit" value="Submit"> <input type="reset" 
       value="Reset"> 
    </form> 

    <% 
     String amount = request.getParameter("amount"); 
     if (amount != null && amount.length() > 0) { 
      BigDecimal d = new BigDecimal(amount); 

      BigDecimal yenAmount = converter.dollarToYen(d); 
    %> 
    <p> 
     <%=amount%> 
     dollars are 
     <%=yenAmount%> 
     Yen. 
    <p> 
     <% 
      BigDecimal euroAmount = converter.yenToEuro(yenAmount); 
     %> 
     <%=yenAmount%> 
     Yen are 
     <%=euroAmount%> 
     Euro. 
     <% 
      } 
     %> 

</body> 
</html> 

"converter.ejb"パッケージと "Converter"パッケージが見つからないという例外が発生しました。

私を助けてください。

更新

私は、この構造で自分のアプリケーションをパッケージ化している:

converter-ejb.jar 
├── converter 
│   └── ejb 
│    ├── ConverterBean.class 
│    └── Converter.class 
└── META-INF 
    ├── ejb-jar.xml 
    ├── MANIFEST.MF 
    └── sun-ejb-jar.xml 

converter-jsp.war 
├── index.jsp 
├── META-INF 
│   └── MANIFEST.MF 
└── WEB-INF 
    ├── classes 
    ├── lib 
    └── sun-web.xml 

converter-jsp-app.ear 
├── converter-ejb.jar 
├── converter-jsp.war 
└── META-INF 
    ├── application.xml 
    └── MANIFEST.MF 

私は、Eclipse IDEで働いていると、コンバータ-JSPプロジェクトをコンパイルする唯一の方法は、追加することですプロジェクトコンバータ-ejbへの参照。私のJSPアプリケーションを実行する唯一の方法は、converter-ejb.jarファイルとconverter-jsp.warファイルへの参照を含むEARプロジェクトを作成することです。

この新しいEARプロジェクトを作成しなくても、アプリケーションをデプロイできますが、JSPコードからEJBを分離して保守しているかどうかを知りたいと思います。 converter-jspプロジェクトのconverter-ejb.jarファイルへの参照を追加しようとしましたが、実行時にConverterクラスが見つからないという例外が発生しました。私が達成しようとしている何

アップデート2

Oracle Application Deployment GuideのPAG 39に記載されています。私は、アプリケーション・サーバーにすべての異なるモジュールをデプロイして、「EAR」アプリケーションを作成してデプロイせずにアプリケーションを実行したいと考えています。

更新3 私がしたいことが可能かどうかはわかりません。しかし、リモートEJB上のメソッドを遠隔から呼び出すためにRMIを使うのが好きだと思います。

答えて

1

converter-jsp.jarには、依存関係としてejbインターフェイスが必要です。あなたのインターフェイスを別のパッケージに入れ、jsp jarの依存関係としてそれらを持たせることをお勧めします。

これらは、異なるEAR/WARファイルにデプロイされていますか?あなたはパッケージング構造について記述できますか?

質問を更新した場合は、それに応じて回答を更新します。

+0

私はあなたの提案に従って、私はこの問題を解決しました。 – PinoSan