JHIPSTER JDL
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[JHIPSTER一覧]]
*** 目次 [#n96aa4b5]
#contents
* JHipsterドメイン言語(JDL) [#z4f90135]
** JDLの概要 [#hbdeb56a]
JDLはJHipster固有のドメイン言語です。すべてのアプリケーシ...
** 前提条件 [#of3736de]
いろいろ、ためしたり、調べたりした結果、どうやら
メンテナーが利用方法を暗黙的に決めており、ドキュメントに...
状況のようで、成功する方法を手探りしましたので、ここにま...
自分が調査した結果、以下のことを守る必要があるようです。
すでにjhipsterで最初のユーザが使える状態になっていること...
空の状態で、いきなりjdlのインポートはできないようになって...
なので、jhipsterとやって、質問にこたえていく標準的なやり...
.yo-rc.jsonというファイルに設定が書き込まれるようになって...
次に、jdl内の application{ config{ }}が少しでも含まれてい...
そこに書き込まれていない値は、.yo-rc.jsonを見てくれないの...
jdl内のapplication{ config{ }} を削除するのを忘れないよ...
サンプルのjdlをダウンロードするとその設定が含まれているこ...
ちなみに、それを使うと、.yo-rc.jsonがデフォルト値で上書き...
あと、 .yo-rc.jsonをガン無視するコードが以下のコードに仕...
ファイル:
lib/converters/json_to_jdl_converter.js
いけない箇所
const jdlApplication = convertApplicationToJDL({ applica...
自分が考える修正後のコード
const jdlApplication = convertApplicationToJDL({ applica...
*** プルリク形式でまとめました。 [#v7f92914]
https://github.com/khayashi4337/jhipster-core/pull/1/files
*** 自分が考える手順 [#s8a0da18]
毎回、インタラクティブに質問に答えるのは面倒なので、以下...
次に、jhipsterを実行するフォルダに、.yo-rc.jsonを配置して...
次に、その配置したフォルダで、
jhipster
と実行すると、質問されずに、.yo-rc.jsonを読み込んでくれま...
jdlファイルに、application{ config{ }}がないことを確認し...
jhipster jdl 上記のjdlファイル
上書きするか質問されるので、一括上書きの場合はaと入力して...
コードを確認したのち、git add して、 git commit ですかね。
コード生成直後はテンプレートに含まれているバグを修正する...
1度どこを直せばいいかわかってしまえば、あとは同じ対応で...
** このページの原文(英語) [#r07a176c]
https://www.jhipster.tech/jdl/
このページは、上記原文の、googleの日本語訳を手直(google...
どなたでも、編集可能です。気に入らない方は、どうぞ、修正...
** JDL Studio [#i86b2ec6]
https://start.jhipster.tech/jdl-studio/
** プレビュー機能 [#r8ac8106]
JDLファイルとそのUMLビジュアライゼーションを作成するには...
実行することで、import-jdlサブジェネレータを使用してJDLフ...
既存のプロジェクト(コマンドラインをjhipster import-jdl使...
生成したJHipsterアプリケーションのルートから実行すること...
これはエンティティサブジェネレータを使用する代わりに使用...
JDLプロジェクトはGitHubで利用可能です、それはJHipster(Ap...
あなたがJHipsterドメイン言語のJDLを気に入ってくれたら、Gi...
* JDLサンプル [#ba008a05]
Oracleの「Human Resources」サンプルアプリケーションはJDL...
https://github.com/jhipster/jdl-samples/blob/master/Oracl...
入手できます。同じアプリケーションがJDL-StudioとJHipster ...
もっとサンプルを探しているのなら、ここ
https://github.com/jhipster/jdl-samples
にそのためのリポジトリがあります。
** どうやって使うのですか [#f4753b46]
*** JDLファイルのインポート [#a32e46e4]
その後、JDLファイルを使用してエンティティを生成できます。
- 拡張子が「.jh」または「.jdl」のファイルを作成するだけで...
- アプリケーション、デプロイメント、エンティティ、および...
実際に使えるやつ
https://start.jhipster.tech/jdl-studio/
またはJHipster IDE(Eclipse VSCode Atomでのインストール動...
https://www.jhipster.tech/jhipster-ide/
でファイルを作成してダウンロードします。
- エンティティのみを作成している場合jhipster import-jdl m...
- アプリケーションを作成している場合jhipster import-jdl m...
チームで作業している場合は、おそらく1つではなく複数のファ...
jhipster import-jdl my_file1.jdl my_file2.jdl
JDLのインポート中にエンティティを再生成したくない場合は、...
jhipster import-jdl ./my-jdl-file.jdl --json-only
デフォルトimport-jdlでは、変更されたエンティティだけが再...
jhipster import-jdl ./my-jdl-file.jdl --force
あなたがあなたのプロジェクトでそれを使いたいならば、あな...
- NPM: npm install jhipster-core --save
- 糸: yarn add jhipster-core
ローカルにインストールしてpackage.jsonファイルに保存しま...
** JDLファイルへのエクスポート [#l64c423a]
アプリケーションに既にエンティティがあり、JDLファイルを取...
jhipster export-jdl <FILE_NAME>アプリのルートフォルダで実...
* 言語 [#e9612a06]
私たちは開発者にとってできるだけフレンドリーな構文を保つ...
- アプリケーションをそのオプションとエンティティで宣言し...
- エンティティをその属性で宣言します。
- それらの間の関係を宣言する、
- そしてJHipster特有のオプションをいくつか宣言します。
JDLの文法を見たいのであれば、ここ
https://github.com/jhipster/jhipster-core/blob/master/lib...
に HTMLファイルがあり ます。
** アプリケーション宣言 [#r1dec1e8]
v2.0.0以降、アプリケーションの宣言は可能です(JHipster v5...
1つまたは複数のアプリケーションをインポートするために、JH...
最も基本的な宣言は次のように行われます。
application {
config {}
}
JHipsterアプリケーションにはデフォルト値の設定があり、前...
- baseName: jhipster
- アプリケーションタイプ: monolith
- databaseType: sql
- 等
今、あなたはいくつかのカスタムオプションが必要な場合:
application {
config {
baseName myapp
applicationType microservice
prodDatabaseType postgresql
buildTool gradle
}
}
これらのオプションは、JDLで利用可能なもののほんの一例です...
複数のアプリケーションが必要な場合は、次のようにします。
application { // will be generated under the 'myFirstApp...
config {
baseName myFirstApp
}
}
application { // will be generated under the 'mySecondAp...
config {
baseName mySecondApp
applicationType microservice
}
}
あなたはあなたが望むだけ多くのファイルにあなたが望むだけ...
エンティティの宣言は利用可能な最も基本的なものであり、今...
前の例を改良しましょう。
application {
config {
baseName myMonolith
applicationType monolith
}
entities * except C, D
}
application {
config {
baseName myGateway
applicationType gateway
serverPort 9042
}
entities * except A, B
}
application {
config {
baseName microserviceA
applicationType microservice
}
entities C
}
application {
config {
baseName microserviceB
applicationType microservice
serverPort 8082
}
entities D
}
entity A
entity B
entity C
entity D
dto * with mapstruct
service * with serviceClass
paginate D with pager
これらのアプリケーションとフォルダを生成すると、いくつか...
- 4つのアプリケーションが作成されます。
-- myMonolithの中./myMonolith、サーバーのポート番号8080
-- myGateway ./myGateway、サーバーポートあり9042
-- サーバー./microserviceAポートとともに、microserviceA i...
--- サーバーポートを指定していなくても、JHipsterはデフォ...
--- マイクロサービスの場合、デフォルトのものは 8081
--- ゲートウェイとモノリスの場合、それは 8080
--- UAAアプリの場合、それは 9999
-- サーバー./microserviceBポートと一緒にmicroserviceB8082
- 4つのエンティティが生成されます
-- AそしてBモノリスの中で
-- CそしてDゲートウェイの両方
--- C 最初のマイクロサービスで
--- D 2番目のマイクロサービス
- このmicroserviceオプションはCand に対して暗黙的ですD
-- これらは2つのマイクロサービスで生成されるため、このオ...
- オプションは以前と同じように機能します
デフォルト値が存在しない場合、ジェネレータはデフォルト値...
** エンティティ宣言 [#g41f40bd]
エンティティ宣言は次のように行われます。
entity <entity name> {
<field name> <type> [<validation>*]
}
- <entity name> エンティティの名前です。
- <field name> エンティティの1つのフィールドの名前
- <type> JHipsterがサポートしているフィールドの型
- オプションとして<validation>フィールドの検証。
可能なタイプと検証はここで説明されているものです、検証が...
これがJDLコードの例です。
entity A
entity B
entity C
entity D {
name String required
address String required maxlength(100)
age Integer required min(18)
}
正規表現は(v1.3.6から)このように使われているのでちょっ...
entity A {
myString String required minlength(1) maxlength(42) pa...
}
v4.9.Xより前のジェネレータを使用している場合は、このよう...
JDLは使いやすく読みやすいように作られているので、もしあな...
JHipsterはデフォルトのidフィールドを追加しているので、心...
** 関係宣言 [#d6283bed]
関係の宣言は次のように行われます。
relationship (OneToMany | ManyToOne | OneToOne | ManyToM...
<from entity>[{<relationship name>[(<display field>)]}...
}
- (OneToMany | ManyToOne| OneToOne | ManyToMany) あなたの...
- <from entity> 関係のエンティティ所有者の名前です。ソー...
- <to entity> 関係が移動するエンティティの名前です。
- <relationship name> 型としてもう一方の端を持つフィール...
- <display field>選択ボックスに表示すべきフィールドの名前...
- required 注入されたフィールドが必要かどうか
- with jpaDerivedIdentifier@MapsId関連付けに使用されるか...
これは簡単な例です:
entity Book
entity Author
relationship ManyToOne {
Book to Author
}
必要に応じてデフォルトで一方(または両方)が設定されるた...
entity Book
entity Author
relationship ManyToOne {
Book{author} to Author
}
もっと複雑にしましょう。本には必要な著者が1人、著者には複...
entity Book
entity Author {
name String required
}
relationship OneToMany {
Author{book} to Book{writer(name) required}
}
ここでは、Bookクラスはのフィールドを通してリンクされると...
もちろん、実際のケースでは、たくさんの関係があり、いつも...
entity A
entity B
entity C
entity D
relationship OneToOne {
A{b} to B{a}
B{c} to C
}
relationship ManyToMany {
A{d} to D{a}
C{d} to D{c}
}
結合は常にidフロントエンドでリレーションを編集するときに...
entity A {
name String required
}
entity B
relationship OneToOne {
A{b} to B{a(name)}
}
JPA派生識別子 - @MapsIdは以下のように宣言することができま...
entity A {
name String required
}
entity B
relationship OneToOne {
A{b} to B{a(name)} with jpaDerivedIdentifier
}
これはJHipster、両方返すRESTリソースを生成させるidとname...
** 列挙型 [#jdfaf91e]
JDLを使ってEnumを作るには、次のようにします。
- ファイル内の任意の場所にEnumを宣言します。
enum Language {
FRENCH, ENGLISH, SPANISH
}
- エンティティで、Enumを型として持つフィールドを追加しま...
entity Book {
title String required,
description String,
language Language
}
** ブロブ(byte []) [#z5a08db9]
JHipsterは、イメージタイプと任意のバイナリタイプの間で選...
- AnyBlobまたは単にBlob「任意」のバイナリ型のフィールドを...
- ImageBlob イメージであることを意味するフィールドを作成...
- TextBlob CLOB(テキスト(長))のフィールドを作成します。
そして、あなたは好きなだけデータ型を作成することができま...
** オプション宣言 [#ccb29bdb]
JHipsterでは、ページネーションやDTOなどのエンティティのオ...
entity A {
name String required
}
entity B
entity C
dto A, B with mapstruct
paginate A with infinite-scroll
paginate B with pagination
paginate C with pager // pager is only available in Ang...
service A with serviceClass
service C with serviceImpl
キーワードはdto、paginate、serviceおよびwithこれらの変更...
*** サービスオプション [#kaec1a88]
指定されたサービスは、リポジトリインタフェースを直接呼び...
確実でない限り、サービスを使用しないのが最も簡単な方法で...
entity A
entity B
entity C
// no service for A
service B with serviceClass
service C with serviceImpl
JDLはマスオプション設定もサポートします。それはすることは...
entity A
entity B
...
entity Z
dto * with mapstruct
service all with serviceImpl
paginate C with pagination
なお*とall同等です。最新バージョンでは除外されています(...
entity A
entity B
...
entity Z
dto * with mapstruct except A
service all with serviceImpl except A, B, C
paginate C with pagination
JHipsterを使用すると、クライアントコードやサーバーコード...
entity A
entity B
entity C
skipClient A
skipServer B
angularSuffix * with mySuperEntities
filter C
最後に、テーブル名も指定できます(エンティティの名前がデ...
entity A // A is the table's name here
entity B (the_best_entity) // the_best_entity is the tab...
** マイクロサービス関連のオプション [#n788a80a]
JHipster v3以降、マイクロサービスを作成できます。JDLでエ...
マイクロサービスの名前(JHipsterアプリの名前)を指定する...
entity A
entity B
entity C
microservice * with mysuperjhipsterapp except C
microservice C with myotherjhipsterapp
search * with elasticsearch except C
最初のオプションはJHipsterにあなたのマイクロサービスにあ...
** アノテーション [#efc314c3]
注釈はJHipster v5以降で利用可能です。Javaで可能なことと同...
たとえば、このJDLコードを見てください。
entity A
entity B
entity C
dto C with mapstruct
paginate * with pager except C
search A with elasticsearch
これはアノテーションと同等です:
@paginate(pager)
@search(elasticsearch)
entity A
@paginate(pager)
entity B
@dto(mapstruct)
entity C
これにより、実際に削除されるよりも多くのコードが追加され...
** デプロイメント宣言 [#nc352c25]
v3.6.0以降では、デプロイメント宣言が可能です(JHipster v5...
1つまたは複数のデプロイメントをインポートするために、JHip...
最も基本的な宣言は次のように行われます。
deployment {
deploymentType docker-compose
appsFolders [foo, bar]
dockerRepositoryName "yourDockerLoginName"
}
JHipsterデプロイメントには他のすべてのプロパティのデフォ...
- deploymentType: docker-compose
- appsFolders: foo, bar
- dockerRepositoryName: yourDockerLoginName
- serviceDiscoveryType: eureka
- gatewayType: zuul
- directoryPath: ../
- 等
今、あなたはいくつかのカスタムオプションが必要な場合:
deployment {
deploymentType kubernetes
appsFolders [store, invoice, notification, product]
dockerRepositoryName "yourDockerLoginName"
serviceDiscoveryType no
istio autoInjection
kubernetesServiceType Ingress
kubernetesNamespace jhipster
ingressDomain "jhipster.192.168.99.100.nip.io"
}
これらのオプションは、JDLで利用可能なもののほんの一例です...
複数の配置が必要な場合は、次のようにします。
// will be created under 'docker-compose' folder
deployment {
deploymentType docker-compose
appsFolders [foo, bar]
dockerRepositoryName "yourDockerLoginName"
}
// will be created under 'kubernetes' folder
deployment {
deploymentType kubernetes
appsFolders [foo, bar]
dockerRepositoryName "yourDockerLoginName"
}
deploymentTypeごとに1つのデプロイメントを持つことができま...
.
├── yourJdlFile.jdl
├── foo
├── bar
├── kubernetes // will created by the JDL
└── docker-compose // will created by the JDL
* コメント&Javadoc [#c9803216]
JavadocとコメントをJDLファイルに追加することは可能です。
Javaと同じように、この例ではJavadocコメントを追加する方法...
/**
* Class comments.
* @author The JHipster team.
*/
entity MyEntity { // another form of comment
/** A required attribute */
myField String required
mySecondField String // another form of comment
}
/**
* Second entity.
*/
entity MySecondEntity {}
relationship OneToMany {
/** This is possible too! */
MyEntity{mySecondEntity}
to
/**
* And this too!
*/
MySecondEntity{myEntity}
}
これらのコメントは、後でJHipsterによってJavadocコメントと...
JDLは独自のコメントを持っています。
// an ignored comment
/** not an ignored comment */
したがって、最初から始まるものはすべて//JDLの内部コメント...
JDL Studioのディレクティブは#構文解析中に無視されます。
コメントの別の形式は以下のコメントです。
entity A {
name String /** My super field */
count Integer /** My other super field */
}
ここでAの名前はとMy super field、B はとコメントされMy oth...
entity A {
name String, /** My comment */
count Integer
}
カウントがするので、Aの名前にはコメントがありません。
** すべての関係 [#rd873b27]
JDLとの関係を作成する方法についての説明。
*** 一対一 [#ob88e95f]
車に運転手がいて、運転手に車がある双方向の関係。
entity Driver
entity Car
relationship OneToOne {
Car{driver} to Driver{car}
}
市民がパスポートを持っているが、そのパスポートがその所有...
entity Citizen
entity Passport
relationship OneToOne {
Citizen to Passport
}
// using @MapsId
relationship OneToOne {
Citizen to Passport with jpaDerivedIdentifier
}
*** 一対多 [#n2a26959]
所有者に1つ以上のCarオブジェクトがなく、Carがその所有者を...
entity Owner
entity Car
relationship OneToMany {
Owner{car} to Car{owner}
}
この関係の単方向バージョンはJHipsterではサポートされてい...
entity Owner
entity Car
relationship OneToMany {
Owner to Car
}
*** 多対一 [#qbd0d4e1]
一対多の関係の相互バージョンは、以前と同じです。車がその...
entity Owner
entity Car
relationship ManyToOne {
Car to Owner
}
*** 多対多 [#f2db90e1]
最後に、この例では、ドライバを知っているCarがあり、Driver...
entity Driver
entity Car
relationship ManyToMany {
Car{driver} to Driver{car}
}
関係の所有側は左側になければならないことに注意してください
** 定数 [#sa8995c7]
JHipster Core v1.2.7以降、JDLは数値定数をサポートします。...
DEFAULT_MIN_LENGTH = 1
DEFAULT_MAX_LENGTH = 42
DEFAULT_MIN_BYTES = 20
DEFAULT_MAX_BYTES = 40
DEFAULT_MIN = 0
DEFAULT_MAX = 41
entity A {
name String minlength(DEFAULT_MIN_LENGTH) maxlength(DE...
content TextBlob required
count Integer min(DEFAULT_MIN) max(DEFAULT_MAX)
}
* ワークフロー [#vfeb8300]
** モノリスワークフロー [#z7d7a43a]
ここに特別なワークフローはありません。
- アプリケーションを作成する
- JDLファイルを作成します
- インポートする
** マイクロサービスのワークフロー [#vfb0e38e]
マイクロサービスを扱うのは少し面倒ですが、JDLにはエンティ...
ではmicroservice <ENTITIES> with <MICROSERVICE_APP_NAME>...
entity A
entity B
entity C
- microservice A with firstMS
- microservice B with secondMS
2つのJHipsterアプリケーション(「firstMS」と「secondMS」...
- 'firstMS'では、エンティティAとCが生成されます。
- 「secondMS」では、エンティティBとCが生成されます。
Cなぜなら、このエンティティがどこで生成されるかを指定する...
注:2つの異なるマイクロサービスで同じエンティティーを生成...
前の例は、このように書かれたはずがありません。
entity A
entity B
entity C
microservice * except B with firstMS
microservice * except A with secondMS
これが結果です。
- 'firstMS'では、エンティティのみCが生成されます
- 「secondMS」では、エンティティBとCが生成されます。構文...
JDLを使ってマイクロサービススタック全体を作成することもで...
https://medium.com/jhipster/create-full-microservice-stac...
を参照してください。
** 附属書 [#pa36af03]
*** 利用可能なアプリケーションオプション [#xc62a0d9]
JDLでサポートされているアプリケーションオプションは次のと...
| JDLオプション名 | デフォルト値 | 可能な値 | コメント |
| applicationType | monolith | monolith, microservice, ga...
| authenticationType | jwt | jwt, session, oauth2 |jwt |
| baseName | jhipster | | |
| blueprint | | Name of an additional blueprint (see Mar...
| blueprints | | Names of additional blueprints (see Mar...
| buildTool | maven | maven, gradle | |
| cacheProvider | ehcache or hazelcast | caffeine, ehcach...
| clientFramework | angularX | angularX, react | |
| clientPackageManager | npm | npm, yarn | |
| clientTheme | none | Something or none |うまくいくこと...
| clientThemeVariant | | Something or primary |うまくい...
| databaseType | sql | sql, mongodb, cassandra, couchbase...
| devDatabaseType | h2Disk | h2Disk, h2Memory, * |* + pro...
| dtoSuffix | DTO | |DTO用のサフィックス.空の文字列の場...
| enableHibernateCache | TRUE | | |
| enableSwaggerCodegen | FALSE | | |
| enableTranslation | TRUE | | |
| entitySuffix | | |エンティティ用のサフィックス.空の場...
| jhiPrefix | jhi | | |
| languages | [en, fr] | Languages available in JHipster ...
| messageBroker | FALSE | kafka, false | |
| nativeLanguage | en | Any language supported by JHipste...
| packageName | com.mycompany.myapp | |packageのフォルダ...
| prodDatabaseType | mysql | mysql, mariadb, mssql, postg...
| reactive | FALSE | | |
| searchEngine | FALSE | elasticsearch, false | |
| serverPort | 8080, 8081 or 9999 | |アプリの種類によっ...
| serviceDiscoveryType | FALSE | eureka, consul, no | |
| skipClient | FALSE | | |
| skipServer | FALSE | | |
| skipUserManagement | FALSE | | |
| testFrameworks | [] | cypress, protractor, cucumber, ga...
| websocket | FALSE | spring-websocket, false | |
** 利用可能な展開オプション [#a86aefbd]
JDLでサポートされているアプリケーションオプションは次のと...
|JDLオプション名 |デフォルト値 |可能な値 |コメント|
| JDL option name | Default value | Possible values | Com...
| deploymentType | docker-compose | docker-compose, kuber...
| directoryPath | "../" | | 相対パス。二重引用符で囲む必...
| appsFolders | [] | | カンマで区切られたアプリケーショ...
| clusteredDbApps | [] | | クラスター化されたDBがコンマ...
| gatewayType | SpringCloudGateway | serviceDiscoveryType...
| monitoring | no | no, prometheus | |
| serviceDiscoveryType | eureka | eureka, consul, no | |
| dockerRepositoryName | | | Dockerリポジトリの名前また...
| dockerPushCommand | "docker push" | | 使用するdockerpu...
| kubernetesNamespace | default | | DeploymentTypeがkube...
| kubernetesUseDynamicStorage | FALSE | true, false | Dep...
| kubernetesStorageClassName | "" | | DeploymentTypeがku...
| kubernetesServiceType | LoadBalancer | LoadBalancer, No...
| ingressDomain | | | kubernetesServiceTypeが `Ingress`...
| ingressType | nginx | nginx, gke | kubernetes入力タイプ...
| istio | FALSE | true, false | DeploymentTypeがkubernete...
| openshiftNamespace | default | | DeploymentTypeがopens...
| storageType | ephemeral | ephemeral, persistent | Deplo...
| registryReplicas | 2 | | OpenShiftデプロイメントタイプ...
** 利用可能なフィールドタイプと制約 [#k0f4973f]
JDLでサポートされている型は次のとおりです。
** 共通データベース [#o5302051]
- PostgreSQL
- MySQL
- MariaDB
- オラクル
- MsSQL
- MongoDB
- カウチベース
** フィールドタイプと検証 [#y8f9e138]
各フィールドタイプには、独自の検証リストがあります。 JDL...
| JDL type | Validations |
| String | required, minlength, maxlength, pattern, uniqu...
| Integer | required, min, max, unique |
| Long | required, min, max, unique |
| BigDecimal | required, min, max, unique |
| Float | required, min, max, unique |
| Double | required, min, max, unique |
| Enum | required, unique |
| Boolean | required, unique |
| LocalDate | required, unique |
| ZonedDateTime | required, unique |
| Instant | required, unique |
| Duration | required, unique |
| UUID | required, unique |
| Blob | required, minbytes, maxbytes, unique |
| AnyBlob | required, minbytes, maxbytes, unique |
| ImageBlob | required, minbytes, maxbytes, unique |
| TextBlob | required, unique |
** 利用可能なオプション [#b1ef7375]
*** 単項オプション [#g4c01a54]
これらのオプションには意味がありません。
- skipClient
- skipServer
- noFluentMethod
- filter
彼らはこのように使用することができます: <OPTION> <ENTITI...
*** バイナリーオプション [#a63bd725]
これらのオプションは値を取ります。
- dto(mapstruct)
- service(serviceClass、serviceImpl)
- paginate(pager、pagination、infinite-scroll)
- search(elasticsearch)
- microservice (カスタム値)
- angularSuffix (カスタム値)
- clientRootFolder (カスタム値)
** トラブルシューティング [#t252e19f]
***JDLインポートは、MS baseNameと一致するときに1つのエン...
これは構文解析システムに関する既知の問題であり、修正する...
詳細についてはJHipster Core issue#308
https://github.com/jhipster/jhipster-core/issues/308
を参照してください。
* 問題とバグ [#vf22b48b]
JDLはGitHub
https://github.com/jhipster/jhipster-core
から入手でき、JHipsterと同じ 貢献ガイドライン
https://github.com/jhipster/generator-jhipster/blob/maste...
に従っています。
図書館自体に関する問題やプルリクエストを提出するために私...
- JDL課題追跡システム [#l70d7bf2]
https://github.com/jhipster/jhipster-core/issues
- JDLプルリクエスト
https://github.com/jhipster/jhipster-core/pulls
何かを送信するときは、できるだけ正確にする必要があります。
- 1つの投稿された号には1つの問題
- プルリクエストは歓迎されていますが、実際に理解できるよ...
* 翻訳者注:さいごに [#ad5859bf]
このページは、だれでも、編集可能にしてあります。
googleの翻訳をベースに、作成してありますが、加筆修正など、
気づいたらお願いします。
* 練習してみる [#o76fd13c]
以下、訳者の練習ターンです。
さて、翻訳は、だいだいこの辺にしておいて、エンティティを...
JDLのサンプルって、HelloWorldにしては、ちょっと、おおきい...
まずは、小さく、やってみたら、どうなるか。実験してみまし...
https://start.jhipster.tech/jdl-studio/
を開いて、既存のコードをバッサリ消して、下記のコードをい...
// AEntityComment
entity AEntity {
// AEntityNameComment
aEntityName String
}
右上のダウンロードボタンを押すと、jhipster-jdl.jhがダウン...
自分のアプリのフォルダにこの、ダウンロードしてきたファイ...
gradlew clean
jshipster import-jdl さっきダウンロードしたファイル名
で、--forceオプションつけとかなかったので、いろいろ上書き...
*** 1個のエンティティ作成の結果はこんな感じ [#k0eff1f2]
Found the .jhipster/AEntity.json configuration file, ent...
The entity AEntity is being updated.
info Using blueprint generator-jhipster-vuejs for e...
create
src\main\resources\config\liquibase\changelog\201907190...
create src\main\resources\config\liquibase\data\a_ent...
create src\main\java\com\mycompany\myapp\domain\AEnti...
create src\main\java\com\mycompany\myapp\repository\A...
create src\main\java\com\mycompany\myapp\web\rest\AEn...
create src\test\java\com\mycompany\myapp\web\rest\AEn...
conflict src\main\resources\config\liquibase\master.xml
? Overwrite src\main\resources\config\liquibase\master.x...
force src\main\resources\config\liquibase\master.xml
conflict src\main\java\com\mycompany\myapp\config\Cache...
? Overwrite src\main\java\com\mycompany\myapp\config\Cac...
overwrite
force src\main\java\com\mycompany\myapp\config\Cache...
create src\main\webapp\app\entities\a-entity\a-entity...
create src\main\webapp\app\entities\a-entity\a-entity...
create src\main\webapp\app\entities\a-entity\a-entity...
conflict src\main\webapp\app\core\jhi-navbar\jhi-navbar...
? Overwrite src\main\webapp\app\core\jhi-navbar\jhi-navb...
force src\main\webapp\app\core\jhi-navbar\jhi-navbar...
create src\main\webapp\app\entities\a-entity\a-entity...
create src\main\webapp\app\entities\a-entity\a-entity...
create src\main\webapp\app\entities\a-entity\a-entity...
create src\main\webapp\app\entities\a-entity\a-entity...
create src\main\webapp\app\shared\model\a-entity.mode...
create src\test\javascript\spec\app\entities\a-entity...
create src\test\javascript\spec\app\entities\a-entity...
create src\test\javascript\spec\app\entities\a-entity...
create src\test\javascript\spec\app\entities\a-entity...
conflict src\main\webapp\app\router\index.ts
? Overwrite src\main\webapp\app\router\index.ts? overwrite
force src\main\webapp\app\router\index.ts
conflict src\main\webapp\app\main.ts
? Overwrite src\main\webapp\app\main.ts? overwrite
force src\main\webapp\app\main.ts
create src\main\webapp\i18n\en\aEntity.json
conflict src\main\webapp\i18n\en\global.json
? Overwrite src\main\webapp\i18n\en\global.json? overwrite
force src\main\webapp\i18n\en\global.json
create src\main\webapp\i18n\ja\aEntity.json
conflict src\main\webapp\i18n\ja\global.json
? Overwrite src\main\webapp\i18n\ja\global.json? overwrite
force src\main\webapp\i18n\ja\global.json
Running `webpack:build` to update client app
Entity AEntity generated successfully.
1つのエンティティ追加だけで、これだけのファイルが修正され...
** 画面上でなにが変わるのか。 [#w5e51b5b]
えーっとですね。まずユーザで、ログインしてみたところ、メ...
リストにダミーデータが入っている!
** JDLで書いたコメントはどうなったのだろうか。 [#q9d97d70]
上記のサンプルのjdlに、記入したコメントは、生成に反映され...
AEntityCommentは、どこに消えた?...
どこにも、反映されてないもよう。
AEntityNameCommentは、どこに消えた?...
これも、反映されてないもよう。
実験の結果、jdlのコメントは、生成時に、ないものとして、処...
** 実験2 エンティティのカラムを1つ追加したらどうなるの...
例えば、エンティティにメールアドレスを追加しとしたら、ど...
entity AEntity {
aEntityName String
aMailAddress String
}
でやってみます。
jhipster import-jdl jhipster-jdl.jh
*** 結果 [#ldb41b26]
Found the .jhipster/AEntity.json configuration file, ent...
The entity AEntity is being updated.
info Using blueprint generator-jhipster-vuejs for e...
create src\main\resources\config\liquibase\changelog\...
conflict src\main\resources\config\liquibase\data\a_ent...
? Overwrite src\main\resources\config\liquibase\data\a_e...
force src\main\resources\config\liquibase\data\a_ent...
conflict src\main\java\com\mycompany\myapp\domain\AEnti...
? Overwrite src\main\java\com\mycompany\myapp\domain\AEn...
force src\main\java\com\mycompany\myapp\domain\AEnti...
identical src\main\java\com\mycompany\myapp\repository\A...
identical src\main\java\com\mycompany\myapp\web\rest\AEn...
conflict src\test\java\com\mycompany\myapp\web\rest\AEn...
? Overwrite src\test\java\com\mycompany\myapp\web\rest\A...
force src\test\java\com\mycompany\myapp\web\rest\AEn...
conflict src\main\resources\config\liquibase\master.xml
? Overwrite src\main\resources\config\liquibase\master.x...
force src\main\resources\config\liquibase\master.xml
identical src\main\java\com\mycompany\myapp\config\Cache...
conflict src\main\webapp\app\entities\a-entity\a-entity...
? Overwrite src\main\webapp\app\entities\a-entity\a-enti...
force src\main\webapp\app\entities\a-entity\a-entity...
conflict src\main\webapp\app\entities\a-entity\a-entity...
? Overwrite src\main\webapp\app\entities\a-entity\a-enti...
force src\main\webapp\app\entities\a-entity\a-entity...
conflict src\main\webapp\app\entities\a-entity\a-entity...
? Overwrite src\main\webapp\app\entities\a-entity\a-enti...
force src\main\webapp\app\entities\a-entity\a-entity...
identical src\main\webapp\app\core\jhi-navbar\jhi-navbar...
identical src\main\webapp\app\entities\a-entity\a-entity...
conflict src\main\webapp\app\entities\a-entity\a-entity...
? Overwrite src\main\webapp\app\entities\a-entity\a-enti...
force src\main\webapp\app\entities\a-entity\a-entity...
identical src\main\webapp\app\entities\a-entity\a-entity...
identical src\main\webapp\app\entities\a-entity\a-entity...
conflict src\main\webapp\app\shared\model\a-entity.mode...
? Overwrite src\main\webapp\app\shared\model\a-entity.mo...
force src\main\webapp\app\shared\model\a-entity.mode...
identical src\test\javascript\spec\app\entities\a-entity...
identical src\test\javascript\spec\app\entities\a-entity...
identical src\test\javascript\spec\app\entities\a-entity...
conflict src\test\javascript\spec\app\entities\a-entity...
? Overwrite src\test\javascript\spec\app\entities\a-enti...
force src\test\javascript\spec\app\entities\a-entity...
identical src\main\webapp\app\router\index.ts
identical src\main\webapp\app\main.ts
conflict src\main\webapp\i18n\en\aEntity.json
? Overwrite src\main\webapp\i18n\en\aEntity.json? overwr...
force src\main\webapp\i18n\en\aEntity.json
identical src\main\webapp\i18n\en\global.json
conflict src\main\webapp\i18n\ja\aEntity.json
? Overwrite src\main\webapp\i18n\ja\aEntity.json? overwr...
force src\main\webapp\i18n\ja\aEntity.json
identical src\main\webapp\i18n\ja\global.json
Running `webpack:build` to update client app
Entity AEntity generated successfully.
で、気になるエラーが
liquibase.exception.ValidationFailedException: Validatio...
1 change sets check sum
config/liquibase/changelog/20190719011806_added_entity_A...
*** ログファイルのありか [#ua9ab501]
config/liquibase/changelog
*** 画面で確認すると、次のエラーが [#z56c967a]
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: 列 "...
カラムが更新されていないようだ。カラム追加には、何か、作...
ググると、liquibaseチェックサムが働いて、勝手に変更できな...
mavenの場合は、
mvn liquibase:clearCheckSums
ってやらないと、叱られちゃうみたい。
gradleの場合は、
./gradlew liquibaseClearChecksums --stacktrace
なんだけど、
Caused by: org.gradle.internal.resolve.ModuleVersionNotFo...
って怒られた
** もしかして、 エンティティのカラム追加にコマンドあるん...
jhipster entity 変更したいエンティティ
で、追加メニューがあることを確認しました。
修正したいエンティティが、今回たまたま、 AEntityだったと...
jhipster entity AEntity
と書きます。
すると、次のコマンドラインの質問がきます。
The entity AEntity is being updated.
? Do you want to update the entity? This will replace th...
verwritten (Use arrow keys)
> Yes, re generate the entity
Yes, add more fields and relationships
Yes, remove fields and relationships
No, exit
カーソルキーの上下で、選びます。
でも、このやり方も、一度、ダミーデータがはいってしまうと...
** どうやって、回避するの? [#ndd4fb32]
いまのところ、うまくいくのは、
gradle clean
というありがちな方法でした。さいしょっから、やっておけば...
終了行:
[[JHIPSTER一覧]]
*** 目次 [#n96aa4b5]
#contents
* JHipsterドメイン言語(JDL) [#z4f90135]
** JDLの概要 [#hbdeb56a]
JDLはJHipster固有のドメイン言語です。すべてのアプリケーシ...
** 前提条件 [#of3736de]
いろいろ、ためしたり、調べたりした結果、どうやら
メンテナーが利用方法を暗黙的に決めており、ドキュメントに...
状況のようで、成功する方法を手探りしましたので、ここにま...
自分が調査した結果、以下のことを守る必要があるようです。
すでにjhipsterで最初のユーザが使える状態になっていること...
空の状態で、いきなりjdlのインポートはできないようになって...
なので、jhipsterとやって、質問にこたえていく標準的なやり...
.yo-rc.jsonというファイルに設定が書き込まれるようになって...
次に、jdl内の application{ config{ }}が少しでも含まれてい...
そこに書き込まれていない値は、.yo-rc.jsonを見てくれないの...
jdl内のapplication{ config{ }} を削除するのを忘れないよ...
サンプルのjdlをダウンロードするとその設定が含まれているこ...
ちなみに、それを使うと、.yo-rc.jsonがデフォルト値で上書き...
あと、 .yo-rc.jsonをガン無視するコードが以下のコードに仕...
ファイル:
lib/converters/json_to_jdl_converter.js
いけない箇所
const jdlApplication = convertApplicationToJDL({ applica...
自分が考える修正後のコード
const jdlApplication = convertApplicationToJDL({ applica...
*** プルリク形式でまとめました。 [#v7f92914]
https://github.com/khayashi4337/jhipster-core/pull/1/files
*** 自分が考える手順 [#s8a0da18]
毎回、インタラクティブに質問に答えるのは面倒なので、以下...
次に、jhipsterを実行するフォルダに、.yo-rc.jsonを配置して...
次に、その配置したフォルダで、
jhipster
と実行すると、質問されずに、.yo-rc.jsonを読み込んでくれま...
jdlファイルに、application{ config{ }}がないことを確認し...
jhipster jdl 上記のjdlファイル
上書きするか質問されるので、一括上書きの場合はaと入力して...
コードを確認したのち、git add して、 git commit ですかね。
コード生成直後はテンプレートに含まれているバグを修正する...
1度どこを直せばいいかわかってしまえば、あとは同じ対応で...
** このページの原文(英語) [#r07a176c]
https://www.jhipster.tech/jdl/
このページは、上記原文の、googleの日本語訳を手直(google...
どなたでも、編集可能です。気に入らない方は、どうぞ、修正...
** JDL Studio [#i86b2ec6]
https://start.jhipster.tech/jdl-studio/
** プレビュー機能 [#r8ac8106]
JDLファイルとそのUMLビジュアライゼーションを作成するには...
実行することで、import-jdlサブジェネレータを使用してJDLフ...
既存のプロジェクト(コマンドラインをjhipster import-jdl使...
生成したJHipsterアプリケーションのルートから実行すること...
これはエンティティサブジェネレータを使用する代わりに使用...
JDLプロジェクトはGitHubで利用可能です、それはJHipster(Ap...
あなたがJHipsterドメイン言語のJDLを気に入ってくれたら、Gi...
* JDLサンプル [#ba008a05]
Oracleの「Human Resources」サンプルアプリケーションはJDL...
https://github.com/jhipster/jdl-samples/blob/master/Oracl...
入手できます。同じアプリケーションがJDL-StudioとJHipster ...
もっとサンプルを探しているのなら、ここ
https://github.com/jhipster/jdl-samples
にそのためのリポジトリがあります。
** どうやって使うのですか [#f4753b46]
*** JDLファイルのインポート [#a32e46e4]
その後、JDLファイルを使用してエンティティを生成できます。
- 拡張子が「.jh」または「.jdl」のファイルを作成するだけで...
- アプリケーション、デプロイメント、エンティティ、および...
実際に使えるやつ
https://start.jhipster.tech/jdl-studio/
またはJHipster IDE(Eclipse VSCode Atomでのインストール動...
https://www.jhipster.tech/jhipster-ide/
でファイルを作成してダウンロードします。
- エンティティのみを作成している場合jhipster import-jdl m...
- アプリケーションを作成している場合jhipster import-jdl m...
チームで作業している場合は、おそらく1つではなく複数のファ...
jhipster import-jdl my_file1.jdl my_file2.jdl
JDLのインポート中にエンティティを再生成したくない場合は、...
jhipster import-jdl ./my-jdl-file.jdl --json-only
デフォルトimport-jdlでは、変更されたエンティティだけが再...
jhipster import-jdl ./my-jdl-file.jdl --force
あなたがあなたのプロジェクトでそれを使いたいならば、あな...
- NPM: npm install jhipster-core --save
- 糸: yarn add jhipster-core
ローカルにインストールしてpackage.jsonファイルに保存しま...
** JDLファイルへのエクスポート [#l64c423a]
アプリケーションに既にエンティティがあり、JDLファイルを取...
jhipster export-jdl <FILE_NAME>アプリのルートフォルダで実...
* 言語 [#e9612a06]
私たちは開発者にとってできるだけフレンドリーな構文を保つ...
- アプリケーションをそのオプションとエンティティで宣言し...
- エンティティをその属性で宣言します。
- それらの間の関係を宣言する、
- そしてJHipster特有のオプションをいくつか宣言します。
JDLの文法を見たいのであれば、ここ
https://github.com/jhipster/jhipster-core/blob/master/lib...
に HTMLファイルがあり ます。
** アプリケーション宣言 [#r1dec1e8]
v2.0.0以降、アプリケーションの宣言は可能です(JHipster v5...
1つまたは複数のアプリケーションをインポートするために、JH...
最も基本的な宣言は次のように行われます。
application {
config {}
}
JHipsterアプリケーションにはデフォルト値の設定があり、前...
- baseName: jhipster
- アプリケーションタイプ: monolith
- databaseType: sql
- 等
今、あなたはいくつかのカスタムオプションが必要な場合:
application {
config {
baseName myapp
applicationType microservice
prodDatabaseType postgresql
buildTool gradle
}
}
これらのオプションは、JDLで利用可能なもののほんの一例です...
複数のアプリケーションが必要な場合は、次のようにします。
application { // will be generated under the 'myFirstApp...
config {
baseName myFirstApp
}
}
application { // will be generated under the 'mySecondAp...
config {
baseName mySecondApp
applicationType microservice
}
}
あなたはあなたが望むだけ多くのファイルにあなたが望むだけ...
エンティティの宣言は利用可能な最も基本的なものであり、今...
前の例を改良しましょう。
application {
config {
baseName myMonolith
applicationType monolith
}
entities * except C, D
}
application {
config {
baseName myGateway
applicationType gateway
serverPort 9042
}
entities * except A, B
}
application {
config {
baseName microserviceA
applicationType microservice
}
entities C
}
application {
config {
baseName microserviceB
applicationType microservice
serverPort 8082
}
entities D
}
entity A
entity B
entity C
entity D
dto * with mapstruct
service * with serviceClass
paginate D with pager
これらのアプリケーションとフォルダを生成すると、いくつか...
- 4つのアプリケーションが作成されます。
-- myMonolithの中./myMonolith、サーバーのポート番号8080
-- myGateway ./myGateway、サーバーポートあり9042
-- サーバー./microserviceAポートとともに、microserviceA i...
--- サーバーポートを指定していなくても、JHipsterはデフォ...
--- マイクロサービスの場合、デフォルトのものは 8081
--- ゲートウェイとモノリスの場合、それは 8080
--- UAAアプリの場合、それは 9999
-- サーバー./microserviceBポートと一緒にmicroserviceB8082
- 4つのエンティティが生成されます
-- AそしてBモノリスの中で
-- CそしてDゲートウェイの両方
--- C 最初のマイクロサービスで
--- D 2番目のマイクロサービス
- このmicroserviceオプションはCand に対して暗黙的ですD
-- これらは2つのマイクロサービスで生成されるため、このオ...
- オプションは以前と同じように機能します
デフォルト値が存在しない場合、ジェネレータはデフォルト値...
** エンティティ宣言 [#g41f40bd]
エンティティ宣言は次のように行われます。
entity <entity name> {
<field name> <type> [<validation>*]
}
- <entity name> エンティティの名前です。
- <field name> エンティティの1つのフィールドの名前
- <type> JHipsterがサポートしているフィールドの型
- オプションとして<validation>フィールドの検証。
可能なタイプと検証はここで説明されているものです、検証が...
これがJDLコードの例です。
entity A
entity B
entity C
entity D {
name String required
address String required maxlength(100)
age Integer required min(18)
}
正規表現は(v1.3.6から)このように使われているのでちょっ...
entity A {
myString String required minlength(1) maxlength(42) pa...
}
v4.9.Xより前のジェネレータを使用している場合は、このよう...
JDLは使いやすく読みやすいように作られているので、もしあな...
JHipsterはデフォルトのidフィールドを追加しているので、心...
** 関係宣言 [#d6283bed]
関係の宣言は次のように行われます。
relationship (OneToMany | ManyToOne | OneToOne | ManyToM...
<from entity>[{<relationship name>[(<display field>)]}...
}
- (OneToMany | ManyToOne| OneToOne | ManyToMany) あなたの...
- <from entity> 関係のエンティティ所有者の名前です。ソー...
- <to entity> 関係が移動するエンティティの名前です。
- <relationship name> 型としてもう一方の端を持つフィール...
- <display field>選択ボックスに表示すべきフィールドの名前...
- required 注入されたフィールドが必要かどうか
- with jpaDerivedIdentifier@MapsId関連付けに使用されるか...
これは簡単な例です:
entity Book
entity Author
relationship ManyToOne {
Book to Author
}
必要に応じてデフォルトで一方(または両方)が設定されるた...
entity Book
entity Author
relationship ManyToOne {
Book{author} to Author
}
もっと複雑にしましょう。本には必要な著者が1人、著者には複...
entity Book
entity Author {
name String required
}
relationship OneToMany {
Author{book} to Book{writer(name) required}
}
ここでは、Bookクラスはのフィールドを通してリンクされると...
もちろん、実際のケースでは、たくさんの関係があり、いつも...
entity A
entity B
entity C
entity D
relationship OneToOne {
A{b} to B{a}
B{c} to C
}
relationship ManyToMany {
A{d} to D{a}
C{d} to D{c}
}
結合は常にidフロントエンドでリレーションを編集するときに...
entity A {
name String required
}
entity B
relationship OneToOne {
A{b} to B{a(name)}
}
JPA派生識別子 - @MapsIdは以下のように宣言することができま...
entity A {
name String required
}
entity B
relationship OneToOne {
A{b} to B{a(name)} with jpaDerivedIdentifier
}
これはJHipster、両方返すRESTリソースを生成させるidとname...
** 列挙型 [#jdfaf91e]
JDLを使ってEnumを作るには、次のようにします。
- ファイル内の任意の場所にEnumを宣言します。
enum Language {
FRENCH, ENGLISH, SPANISH
}
- エンティティで、Enumを型として持つフィールドを追加しま...
entity Book {
title String required,
description String,
language Language
}
** ブロブ(byte []) [#z5a08db9]
JHipsterは、イメージタイプと任意のバイナリタイプの間で選...
- AnyBlobまたは単にBlob「任意」のバイナリ型のフィールドを...
- ImageBlob イメージであることを意味するフィールドを作成...
- TextBlob CLOB(テキスト(長))のフィールドを作成します。
そして、あなたは好きなだけデータ型を作成することができま...
** オプション宣言 [#ccb29bdb]
JHipsterでは、ページネーションやDTOなどのエンティティのオ...
entity A {
name String required
}
entity B
entity C
dto A, B with mapstruct
paginate A with infinite-scroll
paginate B with pagination
paginate C with pager // pager is only available in Ang...
service A with serviceClass
service C with serviceImpl
キーワードはdto、paginate、serviceおよびwithこれらの変更...
*** サービスオプション [#kaec1a88]
指定されたサービスは、リポジトリインタフェースを直接呼び...
確実でない限り、サービスを使用しないのが最も簡単な方法で...
entity A
entity B
entity C
// no service for A
service B with serviceClass
service C with serviceImpl
JDLはマスオプション設定もサポートします。それはすることは...
entity A
entity B
...
entity Z
dto * with mapstruct
service all with serviceImpl
paginate C with pagination
なお*とall同等です。最新バージョンでは除外されています(...
entity A
entity B
...
entity Z
dto * with mapstruct except A
service all with serviceImpl except A, B, C
paginate C with pagination
JHipsterを使用すると、クライアントコードやサーバーコード...
entity A
entity B
entity C
skipClient A
skipServer B
angularSuffix * with mySuperEntities
filter C
最後に、テーブル名も指定できます(エンティティの名前がデ...
entity A // A is the table's name here
entity B (the_best_entity) // the_best_entity is the tab...
** マイクロサービス関連のオプション [#n788a80a]
JHipster v3以降、マイクロサービスを作成できます。JDLでエ...
マイクロサービスの名前(JHipsterアプリの名前)を指定する...
entity A
entity B
entity C
microservice * with mysuperjhipsterapp except C
microservice C with myotherjhipsterapp
search * with elasticsearch except C
最初のオプションはJHipsterにあなたのマイクロサービスにあ...
** アノテーション [#efc314c3]
注釈はJHipster v5以降で利用可能です。Javaで可能なことと同...
たとえば、このJDLコードを見てください。
entity A
entity B
entity C
dto C with mapstruct
paginate * with pager except C
search A with elasticsearch
これはアノテーションと同等です:
@paginate(pager)
@search(elasticsearch)
entity A
@paginate(pager)
entity B
@dto(mapstruct)
entity C
これにより、実際に削除されるよりも多くのコードが追加され...
** デプロイメント宣言 [#nc352c25]
v3.6.0以降では、デプロイメント宣言が可能です(JHipster v5...
1つまたは複数のデプロイメントをインポートするために、JHip...
最も基本的な宣言は次のように行われます。
deployment {
deploymentType docker-compose
appsFolders [foo, bar]
dockerRepositoryName "yourDockerLoginName"
}
JHipsterデプロイメントには他のすべてのプロパティのデフォ...
- deploymentType: docker-compose
- appsFolders: foo, bar
- dockerRepositoryName: yourDockerLoginName
- serviceDiscoveryType: eureka
- gatewayType: zuul
- directoryPath: ../
- 等
今、あなたはいくつかのカスタムオプションが必要な場合:
deployment {
deploymentType kubernetes
appsFolders [store, invoice, notification, product]
dockerRepositoryName "yourDockerLoginName"
serviceDiscoveryType no
istio autoInjection
kubernetesServiceType Ingress
kubernetesNamespace jhipster
ingressDomain "jhipster.192.168.99.100.nip.io"
}
これらのオプションは、JDLで利用可能なもののほんの一例です...
複数の配置が必要な場合は、次のようにします。
// will be created under 'docker-compose' folder
deployment {
deploymentType docker-compose
appsFolders [foo, bar]
dockerRepositoryName "yourDockerLoginName"
}
// will be created under 'kubernetes' folder
deployment {
deploymentType kubernetes
appsFolders [foo, bar]
dockerRepositoryName "yourDockerLoginName"
}
deploymentTypeごとに1つのデプロイメントを持つことができま...
.
├── yourJdlFile.jdl
├── foo
├── bar
├── kubernetes // will created by the JDL
└── docker-compose // will created by the JDL
* コメント&Javadoc [#c9803216]
JavadocとコメントをJDLファイルに追加することは可能です。
Javaと同じように、この例ではJavadocコメントを追加する方法...
/**
* Class comments.
* @author The JHipster team.
*/
entity MyEntity { // another form of comment
/** A required attribute */
myField String required
mySecondField String // another form of comment
}
/**
* Second entity.
*/
entity MySecondEntity {}
relationship OneToMany {
/** This is possible too! */
MyEntity{mySecondEntity}
to
/**
* And this too!
*/
MySecondEntity{myEntity}
}
これらのコメントは、後でJHipsterによってJavadocコメントと...
JDLは独自のコメントを持っています。
// an ignored comment
/** not an ignored comment */
したがって、最初から始まるものはすべて//JDLの内部コメント...
JDL Studioのディレクティブは#構文解析中に無視されます。
コメントの別の形式は以下のコメントです。
entity A {
name String /** My super field */
count Integer /** My other super field */
}
ここでAの名前はとMy super field、B はとコメントされMy oth...
entity A {
name String, /** My comment */
count Integer
}
カウントがするので、Aの名前にはコメントがありません。
** すべての関係 [#rd873b27]
JDLとの関係を作成する方法についての説明。
*** 一対一 [#ob88e95f]
車に運転手がいて、運転手に車がある双方向の関係。
entity Driver
entity Car
relationship OneToOne {
Car{driver} to Driver{car}
}
市民がパスポートを持っているが、そのパスポートがその所有...
entity Citizen
entity Passport
relationship OneToOne {
Citizen to Passport
}
// using @MapsId
relationship OneToOne {
Citizen to Passport with jpaDerivedIdentifier
}
*** 一対多 [#n2a26959]
所有者に1つ以上のCarオブジェクトがなく、Carがその所有者を...
entity Owner
entity Car
relationship OneToMany {
Owner{car} to Car{owner}
}
この関係の単方向バージョンはJHipsterではサポートされてい...
entity Owner
entity Car
relationship OneToMany {
Owner to Car
}
*** 多対一 [#qbd0d4e1]
一対多の関係の相互バージョンは、以前と同じです。車がその...
entity Owner
entity Car
relationship ManyToOne {
Car to Owner
}
*** 多対多 [#f2db90e1]
最後に、この例では、ドライバを知っているCarがあり、Driver...
entity Driver
entity Car
relationship ManyToMany {
Car{driver} to Driver{car}
}
関係の所有側は左側になければならないことに注意してください
** 定数 [#sa8995c7]
JHipster Core v1.2.7以降、JDLは数値定数をサポートします。...
DEFAULT_MIN_LENGTH = 1
DEFAULT_MAX_LENGTH = 42
DEFAULT_MIN_BYTES = 20
DEFAULT_MAX_BYTES = 40
DEFAULT_MIN = 0
DEFAULT_MAX = 41
entity A {
name String minlength(DEFAULT_MIN_LENGTH) maxlength(DE...
content TextBlob required
count Integer min(DEFAULT_MIN) max(DEFAULT_MAX)
}
* ワークフロー [#vfeb8300]
** モノリスワークフロー [#z7d7a43a]
ここに特別なワークフローはありません。
- アプリケーションを作成する
- JDLファイルを作成します
- インポートする
** マイクロサービスのワークフロー [#vfb0e38e]
マイクロサービスを扱うのは少し面倒ですが、JDLにはエンティ...
ではmicroservice <ENTITIES> with <MICROSERVICE_APP_NAME>...
entity A
entity B
entity C
- microservice A with firstMS
- microservice B with secondMS
2つのJHipsterアプリケーション(「firstMS」と「secondMS」...
- 'firstMS'では、エンティティAとCが生成されます。
- 「secondMS」では、エンティティBとCが生成されます。
Cなぜなら、このエンティティがどこで生成されるかを指定する...
注:2つの異なるマイクロサービスで同じエンティティーを生成...
前の例は、このように書かれたはずがありません。
entity A
entity B
entity C
microservice * except B with firstMS
microservice * except A with secondMS
これが結果です。
- 'firstMS'では、エンティティのみCが生成されます
- 「secondMS」では、エンティティBとCが生成されます。構文...
JDLを使ってマイクロサービススタック全体を作成することもで...
https://medium.com/jhipster/create-full-microservice-stac...
を参照してください。
** 附属書 [#pa36af03]
*** 利用可能なアプリケーションオプション [#xc62a0d9]
JDLでサポートされているアプリケーションオプションは次のと...
| JDLオプション名 | デフォルト値 | 可能な値 | コメント |
| applicationType | monolith | monolith, microservice, ga...
| authenticationType | jwt | jwt, session, oauth2 |jwt |
| baseName | jhipster | | |
| blueprint | | Name of an additional blueprint (see Mar...
| blueprints | | Names of additional blueprints (see Mar...
| buildTool | maven | maven, gradle | |
| cacheProvider | ehcache or hazelcast | caffeine, ehcach...
| clientFramework | angularX | angularX, react | |
| clientPackageManager | npm | npm, yarn | |
| clientTheme | none | Something or none |うまくいくこと...
| clientThemeVariant | | Something or primary |うまくい...
| databaseType | sql | sql, mongodb, cassandra, couchbase...
| devDatabaseType | h2Disk | h2Disk, h2Memory, * |* + pro...
| dtoSuffix | DTO | |DTO用のサフィックス.空の文字列の場...
| enableHibernateCache | TRUE | | |
| enableSwaggerCodegen | FALSE | | |
| enableTranslation | TRUE | | |
| entitySuffix | | |エンティティ用のサフィックス.空の場...
| jhiPrefix | jhi | | |
| languages | [en, fr] | Languages available in JHipster ...
| messageBroker | FALSE | kafka, false | |
| nativeLanguage | en | Any language supported by JHipste...
| packageName | com.mycompany.myapp | |packageのフォルダ...
| prodDatabaseType | mysql | mysql, mariadb, mssql, postg...
| reactive | FALSE | | |
| searchEngine | FALSE | elasticsearch, false | |
| serverPort | 8080, 8081 or 9999 | |アプリの種類によっ...
| serviceDiscoveryType | FALSE | eureka, consul, no | |
| skipClient | FALSE | | |
| skipServer | FALSE | | |
| skipUserManagement | FALSE | | |
| testFrameworks | [] | cypress, protractor, cucumber, ga...
| websocket | FALSE | spring-websocket, false | |
** 利用可能な展開オプション [#a86aefbd]
JDLでサポートされているアプリケーションオプションは次のと...
|JDLオプション名 |デフォルト値 |可能な値 |コメント|
| JDL option name | Default value | Possible values | Com...
| deploymentType | docker-compose | docker-compose, kuber...
| directoryPath | "../" | | 相対パス。二重引用符で囲む必...
| appsFolders | [] | | カンマで区切られたアプリケーショ...
| clusteredDbApps | [] | | クラスター化されたDBがコンマ...
| gatewayType | SpringCloudGateway | serviceDiscoveryType...
| monitoring | no | no, prometheus | |
| serviceDiscoveryType | eureka | eureka, consul, no | |
| dockerRepositoryName | | | Dockerリポジトリの名前また...
| dockerPushCommand | "docker push" | | 使用するdockerpu...
| kubernetesNamespace | default | | DeploymentTypeがkube...
| kubernetesUseDynamicStorage | FALSE | true, false | Dep...
| kubernetesStorageClassName | "" | | DeploymentTypeがku...
| kubernetesServiceType | LoadBalancer | LoadBalancer, No...
| ingressDomain | | | kubernetesServiceTypeが `Ingress`...
| ingressType | nginx | nginx, gke | kubernetes入力タイプ...
| istio | FALSE | true, false | DeploymentTypeがkubernete...
| openshiftNamespace | default | | DeploymentTypeがopens...
| storageType | ephemeral | ephemeral, persistent | Deplo...
| registryReplicas | 2 | | OpenShiftデプロイメントタイプ...
** 利用可能なフィールドタイプと制約 [#k0f4973f]
JDLでサポートされている型は次のとおりです。
** 共通データベース [#o5302051]
- PostgreSQL
- MySQL
- MariaDB
- オラクル
- MsSQL
- MongoDB
- カウチベース
** フィールドタイプと検証 [#y8f9e138]
各フィールドタイプには、独自の検証リストがあります。 JDL...
| JDL type | Validations |
| String | required, minlength, maxlength, pattern, uniqu...
| Integer | required, min, max, unique |
| Long | required, min, max, unique |
| BigDecimal | required, min, max, unique |
| Float | required, min, max, unique |
| Double | required, min, max, unique |
| Enum | required, unique |
| Boolean | required, unique |
| LocalDate | required, unique |
| ZonedDateTime | required, unique |
| Instant | required, unique |
| Duration | required, unique |
| UUID | required, unique |
| Blob | required, minbytes, maxbytes, unique |
| AnyBlob | required, minbytes, maxbytes, unique |
| ImageBlob | required, minbytes, maxbytes, unique |
| TextBlob | required, unique |
** 利用可能なオプション [#b1ef7375]
*** 単項オプション [#g4c01a54]
これらのオプションには意味がありません。
- skipClient
- skipServer
- noFluentMethod
- filter
彼らはこのように使用することができます: <OPTION> <ENTITI...
*** バイナリーオプション [#a63bd725]
これらのオプションは値を取ります。
- dto(mapstruct)
- service(serviceClass、serviceImpl)
- paginate(pager、pagination、infinite-scroll)
- search(elasticsearch)
- microservice (カスタム値)
- angularSuffix (カスタム値)
- clientRootFolder (カスタム値)
** トラブルシューティング [#t252e19f]
***JDLインポートは、MS baseNameと一致するときに1つのエン...
これは構文解析システムに関する既知の問題であり、修正する...
詳細についてはJHipster Core issue#308
https://github.com/jhipster/jhipster-core/issues/308
を参照してください。
* 問題とバグ [#vf22b48b]
JDLはGitHub
https://github.com/jhipster/jhipster-core
から入手でき、JHipsterと同じ 貢献ガイドライン
https://github.com/jhipster/generator-jhipster/blob/maste...
に従っています。
図書館自体に関する問題やプルリクエストを提出するために私...
- JDL課題追跡システム [#l70d7bf2]
https://github.com/jhipster/jhipster-core/issues
- JDLプルリクエスト
https://github.com/jhipster/jhipster-core/pulls
何かを送信するときは、できるだけ正確にする必要があります。
- 1つの投稿された号には1つの問題
- プルリクエストは歓迎されていますが、実際に理解できるよ...
* 翻訳者注:さいごに [#ad5859bf]
このページは、だれでも、編集可能にしてあります。
googleの翻訳をベースに、作成してありますが、加筆修正など、
気づいたらお願いします。
* 練習してみる [#o76fd13c]
以下、訳者の練習ターンです。
さて、翻訳は、だいだいこの辺にしておいて、エンティティを...
JDLのサンプルって、HelloWorldにしては、ちょっと、おおきい...
まずは、小さく、やってみたら、どうなるか。実験してみまし...
https://start.jhipster.tech/jdl-studio/
を開いて、既存のコードをバッサリ消して、下記のコードをい...
// AEntityComment
entity AEntity {
// AEntityNameComment
aEntityName String
}
右上のダウンロードボタンを押すと、jhipster-jdl.jhがダウン...
自分のアプリのフォルダにこの、ダウンロードしてきたファイ...
gradlew clean
jshipster import-jdl さっきダウンロードしたファイル名
で、--forceオプションつけとかなかったので、いろいろ上書き...
*** 1個のエンティティ作成の結果はこんな感じ [#k0eff1f2]
Found the .jhipster/AEntity.json configuration file, ent...
The entity AEntity is being updated.
info Using blueprint generator-jhipster-vuejs for e...
create
src\main\resources\config\liquibase\changelog\201907190...
create src\main\resources\config\liquibase\data\a_ent...
create src\main\java\com\mycompany\myapp\domain\AEnti...
create src\main\java\com\mycompany\myapp\repository\A...
create src\main\java\com\mycompany\myapp\web\rest\AEn...
create src\test\java\com\mycompany\myapp\web\rest\AEn...
conflict src\main\resources\config\liquibase\master.xml
? Overwrite src\main\resources\config\liquibase\master.x...
force src\main\resources\config\liquibase\master.xml
conflict src\main\java\com\mycompany\myapp\config\Cache...
? Overwrite src\main\java\com\mycompany\myapp\config\Cac...
overwrite
force src\main\java\com\mycompany\myapp\config\Cache...
create src\main\webapp\app\entities\a-entity\a-entity...
create src\main\webapp\app\entities\a-entity\a-entity...
create src\main\webapp\app\entities\a-entity\a-entity...
conflict src\main\webapp\app\core\jhi-navbar\jhi-navbar...
? Overwrite src\main\webapp\app\core\jhi-navbar\jhi-navb...
force src\main\webapp\app\core\jhi-navbar\jhi-navbar...
create src\main\webapp\app\entities\a-entity\a-entity...
create src\main\webapp\app\entities\a-entity\a-entity...
create src\main\webapp\app\entities\a-entity\a-entity...
create src\main\webapp\app\entities\a-entity\a-entity...
create src\main\webapp\app\shared\model\a-entity.mode...
create src\test\javascript\spec\app\entities\a-entity...
create src\test\javascript\spec\app\entities\a-entity...
create src\test\javascript\spec\app\entities\a-entity...
create src\test\javascript\spec\app\entities\a-entity...
conflict src\main\webapp\app\router\index.ts
? Overwrite src\main\webapp\app\router\index.ts? overwrite
force src\main\webapp\app\router\index.ts
conflict src\main\webapp\app\main.ts
? Overwrite src\main\webapp\app\main.ts? overwrite
force src\main\webapp\app\main.ts
create src\main\webapp\i18n\en\aEntity.json
conflict src\main\webapp\i18n\en\global.json
? Overwrite src\main\webapp\i18n\en\global.json? overwrite
force src\main\webapp\i18n\en\global.json
create src\main\webapp\i18n\ja\aEntity.json
conflict src\main\webapp\i18n\ja\global.json
? Overwrite src\main\webapp\i18n\ja\global.json? overwrite
force src\main\webapp\i18n\ja\global.json
Running `webpack:build` to update client app
Entity AEntity generated successfully.
1つのエンティティ追加だけで、これだけのファイルが修正され...
** 画面上でなにが変わるのか。 [#w5e51b5b]
えーっとですね。まずユーザで、ログインしてみたところ、メ...
リストにダミーデータが入っている!
** JDLで書いたコメントはどうなったのだろうか。 [#q9d97d70]
上記のサンプルのjdlに、記入したコメントは、生成に反映され...
AEntityCommentは、どこに消えた?...
どこにも、反映されてないもよう。
AEntityNameCommentは、どこに消えた?...
これも、反映されてないもよう。
実験の結果、jdlのコメントは、生成時に、ないものとして、処...
** 実験2 エンティティのカラムを1つ追加したらどうなるの...
例えば、エンティティにメールアドレスを追加しとしたら、ど...
entity AEntity {
aEntityName String
aMailAddress String
}
でやってみます。
jhipster import-jdl jhipster-jdl.jh
*** 結果 [#ldb41b26]
Found the .jhipster/AEntity.json configuration file, ent...
The entity AEntity is being updated.
info Using blueprint generator-jhipster-vuejs for e...
create src\main\resources\config\liquibase\changelog\...
conflict src\main\resources\config\liquibase\data\a_ent...
? Overwrite src\main\resources\config\liquibase\data\a_e...
force src\main\resources\config\liquibase\data\a_ent...
conflict src\main\java\com\mycompany\myapp\domain\AEnti...
? Overwrite src\main\java\com\mycompany\myapp\domain\AEn...
force src\main\java\com\mycompany\myapp\domain\AEnti...
identical src\main\java\com\mycompany\myapp\repository\A...
identical src\main\java\com\mycompany\myapp\web\rest\AEn...
conflict src\test\java\com\mycompany\myapp\web\rest\AEn...
? Overwrite src\test\java\com\mycompany\myapp\web\rest\A...
force src\test\java\com\mycompany\myapp\web\rest\AEn...
conflict src\main\resources\config\liquibase\master.xml
? Overwrite src\main\resources\config\liquibase\master.x...
force src\main\resources\config\liquibase\master.xml
identical src\main\java\com\mycompany\myapp\config\Cache...
conflict src\main\webapp\app\entities\a-entity\a-entity...
? Overwrite src\main\webapp\app\entities\a-entity\a-enti...
force src\main\webapp\app\entities\a-entity\a-entity...
conflict src\main\webapp\app\entities\a-entity\a-entity...
? Overwrite src\main\webapp\app\entities\a-entity\a-enti...
force src\main\webapp\app\entities\a-entity\a-entity...
conflict src\main\webapp\app\entities\a-entity\a-entity...
? Overwrite src\main\webapp\app\entities\a-entity\a-enti...
force src\main\webapp\app\entities\a-entity\a-entity...
identical src\main\webapp\app\core\jhi-navbar\jhi-navbar...
identical src\main\webapp\app\entities\a-entity\a-entity...
conflict src\main\webapp\app\entities\a-entity\a-entity...
? Overwrite src\main\webapp\app\entities\a-entity\a-enti...
force src\main\webapp\app\entities\a-entity\a-entity...
identical src\main\webapp\app\entities\a-entity\a-entity...
identical src\main\webapp\app\entities\a-entity\a-entity...
conflict src\main\webapp\app\shared\model\a-entity.mode...
? Overwrite src\main\webapp\app\shared\model\a-entity.mo...
force src\main\webapp\app\shared\model\a-entity.mode...
identical src\test\javascript\spec\app\entities\a-entity...
identical src\test\javascript\spec\app\entities\a-entity...
identical src\test\javascript\spec\app\entities\a-entity...
conflict src\test\javascript\spec\app\entities\a-entity...
? Overwrite src\test\javascript\spec\app\entities\a-enti...
force src\test\javascript\spec\app\entities\a-entity...
identical src\main\webapp\app\router\index.ts
identical src\main\webapp\app\main.ts
conflict src\main\webapp\i18n\en\aEntity.json
? Overwrite src\main\webapp\i18n\en\aEntity.json? overwr...
force src\main\webapp\i18n\en\aEntity.json
identical src\main\webapp\i18n\en\global.json
conflict src\main\webapp\i18n\ja\aEntity.json
? Overwrite src\main\webapp\i18n\ja\aEntity.json? overwr...
force src\main\webapp\i18n\ja\aEntity.json
identical src\main\webapp\i18n\ja\global.json
Running `webpack:build` to update client app
Entity AEntity generated successfully.
で、気になるエラーが
liquibase.exception.ValidationFailedException: Validatio...
1 change sets check sum
config/liquibase/changelog/20190719011806_added_entity_A...
*** ログファイルのありか [#ua9ab501]
config/liquibase/changelog
*** 画面で確認すると、次のエラーが [#z56c967a]
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: 列 "...
カラムが更新されていないようだ。カラム追加には、何か、作...
ググると、liquibaseチェックサムが働いて、勝手に変更できな...
mavenの場合は、
mvn liquibase:clearCheckSums
ってやらないと、叱られちゃうみたい。
gradleの場合は、
./gradlew liquibaseClearChecksums --stacktrace
なんだけど、
Caused by: org.gradle.internal.resolve.ModuleVersionNotFo...
って怒られた
** もしかして、 エンティティのカラム追加にコマンドあるん...
jhipster entity 変更したいエンティティ
で、追加メニューがあることを確認しました。
修正したいエンティティが、今回たまたま、 AEntityだったと...
jhipster entity AEntity
と書きます。
すると、次のコマンドラインの質問がきます。
The entity AEntity is being updated.
? Do you want to update the entity? This will replace th...
verwritten (Use arrow keys)
> Yes, re generate the entity
Yes, add more fields and relationships
Yes, remove fields and relationships
No, exit
カーソルキーの上下で、選びます。
でも、このやり方も、一度、ダミーデータがはいってしまうと...
** どうやって、回避するの? [#ndd4fb32]
いまのところ、うまくいくのは、
gradle clean
というありがちな方法でした。さいしょっから、やっておけば...
ページ名: