自作プログラムEJB3.0 ?.java2008-05-06 Tue 00:14
本当に申し訳ないのですが、これでEJBのJavaのクラスは出揃ったので終了となりそうです。
mixi利用者だけがjspやxmlファイルを見れてそれ以外の方は見れないのは不公平なので何とかしていきたいとは思っています。 jspやxmlファイルの公開には時間がかかるかもしれませんし、そもそもどうやっても無理な可能性もありますが、頑張っていきますので今後とも宜しくお願いします。 下記はビジネスインターフェースです。 package ?1.ejb; import javax.ejb.Remote; //リモートアノテーションを使うのに必要 @Remote //リモートなビジネスインターフェースであることを宣言 public interface ?2(インタフェース名) { public String execute(int year,int month,int day); //以下Beanでオーバーライドしてもらうメソッドを記述する public void setPattern1(String pattern1); public String getPattern1(); public void setPattern2(String pattern2); public String getPattern2(); } |
自作プログラムEJB3.0 ?Servlet.java2008-05-05 Mon 07:06
package ?1.web;
import static java.lang.Integer.parseInt; //static importを利用して静的メソッド呼び出しをメソッド名だけで済ませられるようにする import javax.servlet.http.*; import javax.ejb.EJB; //EJBアノテーションを使うのに必要 import ?1.ejb.?2; //ビジネスインターフェースをインポート public class ?3Servlet extends HttpServlet{ /*EJBアノテーションを使うと InicialContextを使ってのJNDI名でのEJB呼び出しの記述が 不要となる */ @EJB private ?2(ビジネスインターフェースクラス型) a; private static final long serialVersionUID = ?4; public void doPost(HttpServletRequest request, HttpServletResponse response){ int year = 0; int month = 0; int day = 0; String kekka1; String kekka2; String kekka3; try{ request.setCharacterEncoding("Windows-31J"); kekka1 = request.getParameter("year"); //入力フォームでセレクトした年 year = parseInt(kekka1); kekka2 = request.getParameter("month"); //入力フォームでセレクトした月 month = parseInt(kekka2); kekka3 = request.getParameter("day"); //入力フォームでセレクトした日 day = parseInt(kekka3); //ビジネスインターフェース型のインスタンスからBeanを呼び出し戻り値である処理結果をリクエスト属性にセット request.setAttribute("kekka",a.execute(year,month,day)); request.setAttribute("kekka1",kekka1); request.setAttribute("kekka2",kekka2); request.setAttribute("kekka3",kekka3); request.setAttribute("?5",a.getPattern1()); //戻り値の「?6.html」をリクエスト属性にセット request.setAttribute("?7",a.getPattern2()); //戻り値の「?8.html」かnullをリクエスト属性にセット getServletContext().getRequestDispatcher("/kekka.jsp").forward(request,response); } catch(Exception e){ System.out.println(e.getMessage()); e.printStackTrace(); } } } |
自作プログラムEJB3.0 ?Bean.java2008-05-03 Sat 23:55
大変申し訳ありませんが、現時点ではjspファイルやxmlファイルの様な< >(タグ)が入っているファイルをブログで表示させる方法が分からないので、mixiをやっていらっしゃる方はそちらでご覧下さい。
package ?1.ejb; import javax.annotation.*; //リソースアノテーションを使うのに必要 import javax.sql.*; import java.sql.*; import javax.ejb.Stateless; //ステートレスアノテーションを使うのに必要 import java.util.regex.*; //正規表現に関するクラスが入っている @Stateless //このクラスはステートレスセッションビーンであることを宣言 public class ?2Bean implements "ビジネス(リモート)インターフェースクラス名"{ //ビジネスインターフェースを実装(EJB3.0なのでホームインターフェースは要らない) /*データベースに接続するためにリソースを注入。 フィールド名とデータベース接続JNDI名を同じにすると リソースアノテーションのname属性の記述を省略できる。 省略しない場合は例えば @Resource(name="jdbc/datasource")と記述する。*/ @Resource private DataSource datasource; private String pattern1; private String pattern2; public void setPattern1(String pattern1){ this.pattern1 = pattern1; } public String getPattern1(){ return pattern1; } public void setPattern2(String pattern2){ this.pattern2 = pattern2; } public String getPattern2(){ return pattern2; } public String execute(int year,int month,int day){ //この引数にはフォームでセレクトした年月日のそれぞれの値が入っている final int MONTHS = 12; int a = day-1; StringBuilder kekka = new StringBuilder(); //非同期な点を除けばほぼStringBufferと同じ try{ //フィールドdatasourceには既にリソースアノテーションによってデータベース接続情報が注入されているのですぐに接続可能 Connection con = datasource.getConnection(); Statement stmt = con.createStatement(); //西暦と月の組み合わせから一致するaを探してもらう ResultSet rs = stmt.executeQuery("SELECT ?3 FROM ?4 WHERE ?5="+year+" AND ?6="+month); rs.next(); a += rs.getInt(1); if(a>=61){ a -= 60; } //aの値によって処理を変える if(a>=1 && a<=10){ kekka.append("?7"); }else if(a>=11 && a<=20){ kekka.append("?8"); } else if(a>=21 && a<=30){ kekka.append("?9"); } else if(a>=31 && a<=40){ kekka.append("?10"); } else if(a>=41 && a<=50){ kekka.append("?11"); } else{ kekka.append("?12"); } //西暦年が偶数なら?13。奇数なら?14。 if(year%2==0){ kekka.append("?13"); } else{ kekka.append("?14"); } if(a>=1 && a<=10 && year%2==0 && year%MONTHS==2){ kekka.append("?15"); }else if(a>=1 && a<=10 && year%2==1 && year%MONTHS==3){ kekka.append("?16"); }else if(a>=11 && a<=20 && year%2==0 && year%MONTHS==0){ kekka.append("?17"); }else if(a>=11 && a<=20 && year%2==1 && year%MONTHS==1){ kekka.append("?18"); }else if(a>=21 && a<=30 && year%2==0 && year%MONTHS==10){ kekka.append("?19"); }else if(a>=21 && a<=30 && year%2==1 && year%MONTHS==11){ kekka.append("?20"); }else if(a>=31 && a<=40 && year%2==0 && year%MONTHS==8){ kekka.append("?21"); }else if(a>=31 && a<=40 && year%2==1 && year%MONTHS==9){ kekka.append("?22"); }else if(a>=41 && a<=50 && year%2==0 && year%MONTHS==6){ kekka.append("?23"); }else if(a>=41 && a<=50 && year%2==1 && year%MONTHS==7){ kekka.append("?24"); }else if(a>=51 && a<=60 && year%2==0 && year%MONTHS==4){ kekka.append("?25"); }else if(a>=51 && a<=60 && year%2==1 && year%MONTHS==5){ kekka.append("?26"); }else{ kekka.append(""); //上記のいずれにも当てはまらない場合、?ではないので空白を追加する } Pattern p1 = Pattern.compile("?27"); //文字列パターン Pattern p2 = Pattern.compile("?28"); Pattern p3 = Pattern.compile("?29"); Pattern p4 = Pattern.compile("?30"); Pattern p5 = Pattern.compile("?31"); Pattern p6 = Pattern.compile("?32"); Matcher m1 = p1.matcher(kekka); //kekkaがソース Matcher m2 = p2.matcher(kekka); Matcher m3 = p3.matcher(kekka); Matcher m4 = p4.matcher(kekka); Matcher m5 = p5.matcher(kekka); Matcher m6 = p6.matcher(kekka); if(m1.find()){ //ソース中に文字列パターンが存在するかどうかを調べる setPattern1("?33.html"); } else if(m2.find()){ setPattern1("?34.html"); } else if(m3.find()){ setPattern1("?35.html"); } else if(m4.find()){ setPattern1("?36.html"); } else if(m5.find()){ setPattern1("?37.html"); } else{ setPattern1("?38.html"); } if(m6.find()){ setPattern2("?39.html"); } else{ setPattern2(null); } } catch(Exception e){ System.out.println(e.getMessage()); e.printStackTrace(); } return kekka.toString(); //appendしたStringBuilderをStringに変換(戻り値がStringの為) } } |
|
| HOME |
|



