1. 無料アクセス解析

プログラミングに没頭しているあるIT技術者の日々

プログラミングに関する技術やコードについて、日々思ったことを書いていくブログです。

自作プログラムEJB3.0 ?.java

本当に申し訳ないのですが、これで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 | コメント:0 | トラックバック:0 |

自作プログラムEJB3.0 ?Servlet.java

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 | コメント:0 | トラックバック:0 |

自作プログラムEJB3.0 ?Bean.java

大変申し訳ありませんが、現時点では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の為)
}
}


自作プログラムEJB3.0 | コメント:0 | トラックバック:0 |
| HOME |