• 検索結果がありません。

3 校での変更点 tif 22% 展開先は c: のようにドライブ名だけを指定します c: jet のよう に指定すると 左図のように jet フォルダが 2 重になってしまいます この状態では動作しなくなるので 注意してください 015 1{drive}/jet/netbeans

N/A
N/A
Protected

Academic year: 2021

シェア "3 校での変更点 tif 22% 展開先は c: のようにドライブ名だけを指定します c: jet のよう に指定すると 左図のように jet フォルダが 2 重になってしまいます この状態では動作しなくなるので 注意してください 015 1{drive}/jet/netbeans"

Copied!
17
0
0

読み込み中.... (全文を見る)

全文

(1)

3校での変更点

010

015

①{drive}/jet/netbeans/bin/netbeans64.exe のショートカットを作成する

020

4.[リンク先]欄に" -J-Xmx512m --fontsize 14" と追記する

C:¥jet¥netbeans¥bin¥netbeans64.exe

-J-Xmx512m --fontsize 14

030

※-J-Xmx512m は、NetBeans が使用するメモリの最大値を 512MB にします。--fontsize 14 は画面表示に使 われるフォントサイズを 14 ポイントに指定します。 ※{drive}は JET を展開したドライブで す。左図では C:¥です。 これ以降、JET を配置したドライブを {drive}と表記します。

9110.tif

53%

展開先は、c:¥のようにドライブ名だけを指定します。c:¥jet のよう に指定すると、左図のように jet フォルダが 2 重になってしまいます。 この状態では動作しなくなるので、注意してください。

9112.tif

22%

本文の 90%のフォントサイズ、黒枠で囲む。

(2)

040

・ファイルダイアログが開くので、{drive}/jet/

payara

を選択する

045

④-4 Payara Server を起動する

・[サーバー]ノードを展開し、Payara Server を表示する ・Payara Server を右ボタンでクリックし、[start]を選ぶ

⇒出力ダイアログが開き、サーバーの起動状態が表示される

※出力ダイアログが開かない場合は、Payara Server を右クリックし、[View Domain Server Log]を 選択する

(注意)初回の起動時のみ、起動完了まで 1 分~最大 3 分程度の時間を要します。

050

{drive}/jet ⇒ projects ⇒ sampleProjects

060

プロジェクトをコンパイルして、設定ファイルなどと共に 1 つのファイルにまとめることを

ビルド

といいます。ここでは builder というプロジェクトを開いて、ビルドし、さらに実行し

てみましょう。builder は、新規プロジェクトを作成する時に使うツールです。

9116.tif

60%

9118.tif

68%

この部分は、ゴシ、青、太字

(3)

100

①[プロジェクト]タブをクリックする

②[ファイル]⇒[プロジェクトを開く]と選択する

③ファイルダイアログで、{drive}/jet ⇒ projects ⇒ sampleProjects と選択する ④[builder]プロジェクトをクリックして選択し、[プロジェクトを開く]ボタンを押す

手順 2 builder プロジェクトをビルドして実行する

①上段の ボタンを押して実行に使うブラウザを指定する

(Chrome、Edge、Safari など Internet Explorer 以外のブラウザを選択する。また、巻末資料「1.既定 のブラウザを設定する方法]には、あらかじめ既定値を決めておく方法の説明がある) ②builder プロジェクトを 1 度クリックして選択状態にする ③ ボタンを押してプロジェクトをビルドする ④ビルドが完了したら ボタンを押してプロジェクトを実行する ⇒ ブラウザに実行画面が表示される

プロジェクトのビルドと実行は、以上で完了です。この builder プロジェクトは、空のプロ

ジェクトを生成するプロジェクトビルダーで、新しいプロジェクトを作りたい時に利用します。

ここで、3 章で使う sample01 プロジェクトを作っておきます。プロジェクト名に sample01

と入力して、このまま作成ボタンを押してください(一般に、GroupID は変更する必要はあり

ません)

。これで、sample01 プロジェクトが作成されます。作成される場所は、builder と同

じフォルダになります。メニューから[ファイル]⇒[プロジェクトを開く]と選択し、sample01

プロジェクトを開いてみてください。また、ビルドして実行してみましょう。

110

ここまで

9180.tif

53%

9160.tif

40%

9130.tif

9140.tif

9150.tif

9130.tif~9140.tif の サイズは文字に合わせて、 適宜、調整してください

110

ここから

(4)

115

例えば、CDI ビーンの中に、書籍の List を返すメソッドがある時、メソッドに@Produces を

付けると、書籍の List をインジェクトできるようになります。

120

例題のように@Produces を付けると、他の CDI ビーンに、

130

※windows では{drive}は JET を展開したc:¥のようなドライブ文字です。また、Mac では/ユーザ/<home>/ですが、エイリ アスとして~を使えるので、/ユーザ/<home>/jet/docker は、~/jet/dockerと同じです。

140

※Mac では voluems:は、- ~/docker/mysql_data:/var/lib/mysql です

150

⑦[接続をテスト]ボタンを押して、

「接続に成功しました」と表示されることを確認する

⑧[次>]ボタンを押す

(5)

2.6 Payara Server の設定

前節までで、MySQL サーバーを動かし、NetBeans からデータベースを起動したり、内容を見

たりできるようになりましたが、プログラムでデータベースを読み書きするには、Payara

Server にも設定が必要です。

というのも、プログラムは JPA を利用してデータベースを操作しますが、JPA での操作を M

ySQL に伝えるのは Payara Server だからです。Payara Server は MySQL への接続情報を知

っておく必要がありますし、また、効率よく接続するために接続プールを作成しておくことも

必要です。さらにプログラムが名前を指定するだけでデータベースサービスを利用できるよう

に、接続名(データソース)を提供する必要があります。そこで、Payar Server に次の 2 つ

の設定を行います。

①コネクションプールの作成

②データソースの作成

設定の具体的な方法は、巻末資料に Windows 専用と一般的な方法に分けて記載しています。

Mac OS は一般的な方法で設定します。比較的簡単な手順ですから、資料を読んで必要な設定を

済ませてください。

次節では、いよいよ、データベースに値を書き込んで表示してみることにします。

160

ここまで

160

ここから

(6)

サーバーコンソールでデータソースを参照する手順

① NetBeans の中から Payar Server を右クリックして Admin Console を開く

あるいは、http://localhost:4848 をブラウザで開く

②[共通タスク]⇒[リソース]⇒[JDBC]⇒[JDBC リソース]と選択する

データソース一覧

※Payara Server 以外のサーバーでは、それぞれのマニュアル等を参照してください。

図で、java:comp/DefaultDataSource と表示されているのが、デフォルトで用意されて

いる論理 JNDI 名です。これを DataSourceLookup に指定します。ただ、デフォルトでは接続

プールが H2Pool となっているので、このままでは使えません。そこで、jdbc/mydb の接続プ

ールである mydbpool を割り当て直すことにします。

割り当て直しの手順

①データソース一覧から jdbc/__default をクリックして編集画面を開く

②プール名を H2Pool から mydbpool に変更して[保存]ボタンを押す

9330.tif

97%

170

ここから

170

ここまで

9300.tif

97%

(7)

5.6 SecurityContext

EL 式の中で行った認証チェックは、SecurityContext オブジェクトをインジェクトするこ

とで、プログラムの中でも実行することができます。

@Inject

SecurityContext context;

String userName = context.getCallerPrincipal().getName(); // ユーザー名を得る boolean result = contex. isCallerInRole("admin"); // グループを調べる

合わせて覚えておきましょう。

180

http://localhost:8080/sample27-05/bookshop/member

182

http://localhost:8080/sample27-05/bookshop/member/5

184

http://localhost:8080/sample27-05/bookshop/member

186

http://localhost:8080/sample27-05/bookshop/member?id=7

188

http://localhost:8080/sample27-05/bookshop/member

190

これから、ソースコードを少しずつ見ながら、クライアント API の使い方を解説します

が、最初にすべてコードを掲載しておきます。少し長いコードですが、それぞれのメソッドは

とても簡単なことがわかるでしょう。

175

ここから

175

ここまで

isCallerInRole() で索引語にする

(8)

44 * *****(データベース処理)*******************************/ 45 @EJB protected ProductFacade productDb; // 商品データベース 46 @EJB protected CustomerFacade customerDb; // 顧客データベース 47 @EJB protected AppOrderFacade appOrderDb; // 注文履歴データべース 48 @EJB protected OrderLineFacade orderLineDb; // 注文明細データベース 49

50 /* *****(ユーティリティのインジェクト)********************/ 51 @EJB protected ProductManager pm; // 商品マネージャー 52 @Inject protected transient Logger log; // ロガー

53 @EJB protected MailSender sender; // 電子メールユーティリティ 54 @Inject protected Pagenation productPage; // ページングマネージャー 55 @EJB protected OrderManager orderManager; // 顧客の購入履歴の検索

56 @Inject protected MakeText text; // 注文確認メールの文面を作成するユーティリティ 57

58 /* **** (コンテキスト) *********************************/ 59 @Inject SecurityContext securityContext;

60 @Inject FacesContext facesContext; 61 @Inject ExternalContext externalContext;

63 /* *****(初期化)******************************************/ 64 @PostConstruct

65 public void init() {

66 cart = new ArrayList<>(); // カート 67

68 priceItems = new LinkedHashMap<>(); // 並べ替え選択肢 69 priceItems.put("なし", 1);

70 priceItems.put("安い順", 2); 71 priceItems.put("高い順", 3); 72

73 kindItems = new LinkedHashMap<>(); // 種類選択肢 74 kindItems.put("全商品", AppKind.NONE); 75 kindItems.put("新入荷品", AppKind.KIND1); 76 kindItems.put("おすすめ品", AppKind.KIND2); 77 kindItems.put("特価品", AppKind.KIND3); 78 79 productPage.setup(productDb.count(), 5);// ページングマネージャー 80 }

192

ここから

192

ここまで

p.〇

194

ここまで

194

ここから

(9)

1 package beans; 2 import db.*; 3 import net.tkxtools.MailSender; 4 import entity.*; 5 import java.io.ByteArrayInputStream; 6 import java.io.Serializable; 7 import java.util.ArrayList; 8 import java.util.LinkedHashMap; 9 import java.util.List; 10 import java.util.Map; 11 import java.util.logging.Logger; 12 import javax.annotation.PostConstruct; 13 import javax.ejb.EJB; 14 import javax.faces.application.FacesMessage; 15 import javax.faces.context.ExternalContext; 16 import javax.faces.context.FacesContext; 17 import javax.faces.event.PhaseId; 18 import javax.inject.Inject; 19 import javax.security.enterprise.SecurityContext; 20 import org.primefaces.model.DefaultStreamedContent; 21 import org.primefaces.model.StreamedContent; 22 import util.Pagenation; 23 /* 24 * ・フィールド変数とアクセサメソッドを持つ 25 * ・初期化処理を行う 26 * ・ページング処理を行う 27 * ・ユーティリティメソッドもスーパークラスに用意する 28 */

29 public class SuperBb implements Serializable {

30 /* *****(変数)********************************************/ 31 protected Map<String, Integer> priceItems; // 並べ替え選択肢

32 protected Map<String, AppKind> kindItems; // 種類選択肢 33 protected AppKind kindItem = AppKind.NONE; // 種類選択結果 34 protected Integer priceItem = 1; // 並べ替え選択結果 35

36 protected List<OrderLine> cart; // カート

37 protected Product sel; // 詳細画面に表示する商品 38

39 protected String c_name; // 顧客氏名 40 protected String c_address; // 顧客住所 41 protected String c_mail; // 顧客メール 42 protected String c_msg; // 顧客メッセージ 43

44 /* *****(データベース処理)*******************************/ 45 @EJB protected ProductFacade productDb; // 商品データベース

p.〇

p.〇

196

(10)

46 @EJB protected CustomerFacade customerDb; // 顧客データベース 47 @EJB protected AppOrderFacade appOrderDb; // 注文履歴データべース 48 @EJB protected OrderLineFacade orderLineDb; // 注文明細データベース 49

50 /* *****(ユーティリティのインジェクト)********************/ 51 @EJB protected ProductManager pm; // 商品マネージャー 52 @Inject protected transient Logger log; // ロガー

53 @EJB protected MailSender sender; // 電子メールユーティリティ 54 @Inject protected Pagenation productPage; // ページングマネージャー 55 @EJB protected OrderManager orderManager; // 顧客の購入履歴の検索

56 @Inject protected MakeText text; // 注文確認メールの文面を作成するユーティリティ 57

58 /* **** (コンテキスト) *********************************/ 59 @Inject SecurityContext securityContext;

60 @Inject FacesContext facesContext; 61 @Inject ExternalContext externalContext; 62

63 /* *****(初期化)******************************************/ 64 @PostConstruct

65 public void init() {

66 cart = new ArrayList<>(); // カート 67

68 priceItems = new LinkedHashMap<>(); // 並べ替え選択肢 69 priceItems.put("なし", 1);

70 priceItems.put("安い順", 2); 71 priceItems.put("高い順", 3); 72

73 kindItems = new LinkedHashMap<>(); // 種類選択肢 74 kindItems.put("全商品", AppKind.NONE); 75 kindItems.put("新入荷品", AppKind.KIND1); 76 kindItems.put("おすすめ品", AppKind.KIND2); 77 kindItems.put("特価品", AppKind.KIND3); 78 79 productPage.setup(productDb.count(), 5);// ページングマネージャー 80 } 81 /* *****(画像表示処理<小画像>)************************/ 82 public StreamedContent getPicS() {

83 if (facesContext.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) { 84 return new DefaultStreamedContent();

85 } else {

86 String key = externalContext.getRequestParameterMap().get("productId"); 87 Product e = productDb.find(Long.valueOf(key));

88 ByteArrayInputStream in = new ByteArrayInputStream(e.getPic_S()); 89 DefaultStreamedContent ds = new DefaultStreamedContent(in); 90 return ds;

91 }

p.〇

(11)

92 } 93

94 /* *****(画像表示処理<大画像>)************************/ 95 public StreamedContent getPicL() {

96 if (facesContext.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) { 97 return new DefaultStreamedContent();

98 } else {

99 String key = externalContext.getRequestParameterMap().get("productId"); 100 Product e = productDb.find(Long.valueOf(key));

101 ByteArrayInputStream in = new ByteArrayInputStream(e.getPic_L()); 102 DefaultStreamedContent ds = new DefaultStreamedContent(in); 103 return ds;

104 } 105 } 106

107 /* *****(メッセージを作成しキューに入れる)**************/ 108 public void facesMessage(String s) {

109 FacesMessage msg = new FacesMessage(s);

110 FacesContext.getCurrentInstance().addMessage(null, msg); 111 }

112 /* *****(エラーメッセージを作成しキューに入れる)**************/ 113 public void facesErrorMsg(String s) {

114 FacesMessage msg = new FacesMessage(s); 115 msg.setSeverity(FacesMessage.SEVERITY_ERROR); 116 FacesContext.getCurrentInstance().addMessage(null, msg); 117 } 118 /* *****(メッセージを作成しキューに入れる)***************** 119 FacesMessage.SEVERITY_FATAL 致命的エラー(4) 120 FacesMessage.SEVERITY_ERROR エラー(3) 121 FacesMessage.SEVERITY_WARN 警告(2) 122 FacesMessage.SEVERITY_WARN 情報(1) 123 *************************************************************/ 124 public void facesMessage(FacesMessage.Severity severity, String s) {

125 FacesMessage msg = new FacesMessage(s); 126 msg.setSeverity(severity);

127 FacesContext.getCurrentInstance().addMessage(null, msg); 128 }

129 /* *****(ログインしているユーザーの ID を返す */ 130 public String getUserId() {

131 return securityContext.getCallerPrincipal().getName(); 132 } // セッター・ゲッターは記載を省略 }

196

ここまで

(12)

1000

2.2 Payara Server のセットアップ

セットアップには、Payara Server の GUI 画面(Admin Console)で行う方法と、コマン

ドを使う方法があります。ここでは、コマンドによる方法を解説します。GUI 画面による方法

は、次節の「一般的な方法」を参照してください。

コマンドプロンプトを起動して、コマンドをタイプします。例えば、JET を C ドライブの直

下に置いた場合は、次のようにタイプします。他のドライブの場合は C を実際のドライブ名に

読み替えてください。

c: ---

cd c:/jet/payara/bin ---

pool.bat ---

resource.bat ---

1005

ここから

1005

ここまで コマンドのあるフォルダに切り替える 接続プールを作成する データソースを作成する JET のあるドライブに切り替える {drive}は、JET フォルダのある場 所です。Windows なら JET のあるド ライブ、Mac OS ならホームディレク トリ(~)です。 (例) win -- c:¥jet/jdk/bin Mac -- ~/jet/jdk/bin

(13)

3 サーバーのデータベース設定(一般的な方法方法)

サーバー管理画面(Admin Console)を使って、設定を行います。

3.1 データベースドライバの登録(JET では不要)

Payara Server の①か②のフォルダにドライバソフトをコピーします。

①payara/glassfish/domains/domain1/lib (domain1 にだけ有効)

②payara/glassfish/lib (全ドメインに有効)

JET では、あらかじめ①のフォルダに、MySQL8 用の JDBC ドライバをコピーしてあるので、

このコピー操作は不要です。

3.2 コネクションプールの作成

1020

cd {drive}/jet/payara/bin

asadmin start-domain

※{drive}は、Windows では JET のあるドライプ(c:¥など)、MacOS ではホームフォルダ(~)です ※停止コマンドは asadmin stop-domain です

1010

ここから

1010

ここまで

(14)

4.MySQL の外部ボリュームを変更する

MySQL のデータを記録するフォルダを変更するには、JET の docker フォルダにある

docker-compose.yuml ファイルを書き換えます。ただし、書き換えは、MySQL データベースを動かす

前に行ってください。

すでに起動した後であれば、次のコマンドでインスタンスを削除します。これにより、それ

までのデータはすべて消去されます。

docker-compose down

書き換える箇所は、volumes:の部分です。青字で示す部分を、変更したいフォルダのパスに

書き換えます。

Windows では、

ドライブからの絶対パスで指定しないと正常に機能しないので、

注意してください(例は C ドライブの場合)。また、Mac OS では、"~"はホームフォルダを意

味します。

NetBeans

のメニューから、[ファイル]⇒[ファイルを開く]と選択して、docker-compose.yuml ファイルを開いて編集します。書き換えでは、インデントを変更しないように

してください。また、タブを入力しないように注意してください。

Windows

volumes: - /c/mysql_data:/var/lib/mysql

Mac OS

volumes: - ~/mysql_data:/var/lib/mysql

書き換え後、保存して起動します。

docker-compose up -d

1040

ここまで 1040 ここから ~(=ホームフォルダ) で索引語にする

(15)

索引作成時に気が付いた修正

念校で修正予定です。

PDF に茶色で印が入っています。以下はその箇所の説明です。

3章

・トビラページ Jakarta Faces と注記

・68 Jakarta Faces

Jakarta Context and Dependency Injection

・111 p: -> pt:

9 章

286 ID ⇒ id

12 章

トビラ Context and Dependency Injection

⇒ Jakarta Context and Dependency Injection

322 ・同上

・(Context and Dependency Injection)を削除

324 javaEE ⇒ Jakarta EE

14 章

トビラ

・EJB(Enterprise Java Beans)⇒Jakarta Enterprise Beans(EJB)

・注記を追加

390 同上

15 章

409 Java Persistence API ⇒ Jakarta Persistence

418 mysql-connector-java-8.0.19.jar ⇒ mysql-connector-java-8.x.xx.jar

432 javax ⇒ jakarta

16 章

(16)

17 章

トビラに挿入

オブジェクト A がフィールドにオブジェクト B を持つ場合、A から B に対して参照関係が生

まれます。このような参照関係は、1対1の参照関係に限りません。A が B の List を持つ場合

は、A から複数の B を参照できることになります。それは1対多の参照関係です。

このような関係は、Java プログラムの中だけなら気にする必要はないのですが、オブジェク

トをデータベースに格納する場合は、関係を意識してクラス(エンティティ)を定義しなくて

はいけません。この章では、その具体的な方法を、実際に動かせる例題を使って、平易に解説

します。

503 「の」を青太字にする

508 @

ManyToOne ⇒ @ManyToOne

511 @OneToMany を青太字にする

519 1 方向の ManyToMany を青太字にする

523 双方向の Many-to-Many を青太字にする

537 前ページへの移動処理

541 「実行結果のうち」を挿入

542 FO ⇒ OF

545 移動処理がある

560 ダイナミック ⇒ 動的

563 トルツメ

564 クエリ・パラメーター ⇒ クエリ・パラメータ

(17)

20 章

616 ()をトル

641 Jakart ⇒ Jakarta

21 章

651 青矢印を挿入

666 見出しに空白の挿入

巻末資料

691 青太字の指示部分の修正

参照

関連したドキュメント

  BCI は脳から得られる情報を利用して,思考によりコ

次に、第 2 部は、スキーマ療法による認知の修正を目指したプログラムとな

えて リア 会を設 したのです そして、 リア で 会を開 して、そこに 者を 込 ような仕 けをしました そして 会を必 開 して、オブザーバーにも必 の けをし ます

手動のレバーを押して津波がどのようにして起きるかを観察 することができます。シミュレーターの前には、 「地図で見る日本

「1 つでも、2 つでも、世界を変えるような 事柄について考えましょう。素晴らしいアイデ

いてもらう権利﹂に関するものである︒また︑多数意見は本件の争点を歪曲した︒というのは︑第一に︑多数意見は

VREF YZのQRは Io = 30 mA になりま す。 VREF ?を IC のでJKする./、QR のæç でJKするような èとしてGさ い。をéえるQRとした./、

自然言語というのは、生得 な文法 があるということです。 生まれつき に、人 に わっている 力を って乳幼児が獲得できる言語だという え です。 語の それ自 も、 から