JHipsterドメイン言語(JDL) - アプリケーション
構文
アプリケーション宣言は、次のように行われます。
application {
config {
<アプリケーション・オプション名> <アプリケーション・オプション値>
}
[entities <アプリケーション・エンティティのリスト>]
[<オプション>]
}
- アプリケーションの設定キー/値は
config
の下に指定されます(application
の中にある必要があります)。 - 0、1、または任意のアプリケーション・オプションを指定できます(有効な場合)。
- アプリケーション内で生成されるエンティティは、
entities
のリストにします。これは、アプリケーションでエンティティを生成するための 推奨される方法です。- これは省略できますが、その場合アプリケーション内でエンティティを生成するには、以下を行う必要があります。
- アプリケーション内の別のJDLファイルから生成
- またはCLIを使用
- これは省略できますが、その場合アプリケーション内でエンティティを生成するには、以下を行う必要があります。
entities
キーワードはオプションです。省略できますが、JDLファイル内のすべてのエンティティが アプリケーション内で生成されることになります。- アプリケーションには通常のオプション(
dto
またはservice
)を持つことができます。詳細については次のセクションで説明します。
アプリケーションのオプション
オプションの宣言(dto
, service
, skipServer
など)はJDLのアプリケーションでサポートされていますが、いくつかのルールがあります。
たとえば、次のJDLファイルがあ るとします。
application {
config {
baseName app1
}
entities A, B, C
dto * with mapstruct
}
application {
config {
baseName app2
}
entities C, D
paginate * with pagination except D
}
application {
config {
baseName app3
}
entities * except A, B, C, D, F
service * with serviceClass
}
entity A
entity B
entity C
entity D
entity E
entity F
paginate * with infinite-scroll
このサンプルでは、いくつかのことがわかります。
- JDLファイルには、
A, B, C, D, E, F
の6つの宣言されたエンティティがあります。 - 3つのアプリケーション
app1, app2, app3
があります。app1
はA, B, C
を使用します。app2
はC, D
を使用します。app3
はE
を使用します(* except A, B, C, D, F
により)
- 各アプリケーションではオプションとグローバルな オプションを宣言しています。
app1
はdto
宣言をA, B and C
に対して行います。app2
はpaginate
宣言をC
に対して行います(除外があるため)。app3
はservice
をE
に対して行います。- グローバルで
pagination
を(全てのエンティティに対して)宣言します。
どのようにファイルが生成されるかを以下に示します。
app1
A
:infinite-scroll の paginate
(グローバルオプションはローカルオプションを上書きしません)とdto mapstruct
を使用B
: も同様のオプションを使用C
: も同様のオプションを使用
app2
:C
:pagination の paginate
(ローカルが優先のためinfinite-scroll
は無し)D
: それまでのオプションがD
を含めていないためinfinite-scroll の paginate
を使用
app3
:E
:infinite-scroll の paginate
とserviceClass の service
この例は、シャドーイングの原理を示しています。グローバルオプションはサポートされており、アプリケーションでオプションが宣言されていない限り、 宣言されたすべてのアプリケーションで使用されます。
また、次のスニペットはapp3
の前のサンプルから引用したものです。
entities * except A, B, C, D, F
service * with serviceClass
基本としてapp3
はE
のみを使用し、アプリケーショ ンのエンティティはservice
オプションを使用するという意味です。
これはE
のみであり、AからF
ではありません。
最後に、F
エンティティどのアプリケーションにも存在せず、そのため、このエンティティは生成されません。
注:現時点では、すべての標準オプションがサポートされています。
例
基本の例
application {
config {
baseName exampleApp
applicationType gateway
}
}
複数のアプリケーション
application {
config {
baseName exampleApp1
applicationType microservice
serverPort 9001
}
}
application {
config {
baseName exampleApp2
applicationType microservice
serverPort 9002
}
}
application {
config {
baseName exampleApp3
applicationType gateway
serverPort 9000
}
}
エンティティを付与
application {
config {
baseName exampleApp1
applicationType microservice
serverPort 9001
}
entities A
}
application {
config {
baseName exampleApp2
applicationType microservice
serverPort 9002
}
entities * except A
}
entity A
entity B
entity C
オプションを付与
application {
config {
baseName exampleApp1
applicationType microservice
serverPort 9001
}
entities A
dto A with mapstruct
}
application {
config {
baseName exampleApp2
applicationType microservice
serverPort 9002
}
entities * except A
paginate C with pagination
}
entity A
entity B
entity C
完全なサンプルのブレークダウン
例1:
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 pagination
これらのアプリケーションおよびフォルダを生成すると、いくつかの処理が行われます。
- 4つのアプリケーションが作成されます。
- サーバーポートを
8080
とし、./myMonolith
以下にmyMonolithを作成 - サーバーポートを
9042
とし、./myGateway
以下にmyGatewayを作成 - サーバーポートを
8081
とし、./microserviceA
以下にmicroserviceAを作成- サーバー・ポートを指定しなかったとしても、JHipsterはデフォルトでポートを設定します。
- マイクロサービスの場合、デフォルトは
8081
です。 - ゲートウェイとモノリスの場合は
8080
です。
- サーバーポートを
8082
とし、./microserviceB
以下にmicroserviceBを作成
- サーバーポートを
- 4つのエンティティが生成されます。
- モノリス内に
A
とB
- ゲートウェイ内に
C
とD
- 最初のマイクロサービスに
C
- 2番目のマイクロサービスに
D
- 最初のマイクロサービスに
- モノリス内に
microservice
オプションは、C
およびD
に対して暗黙的に付けられます。- 2つのマイクロサービスで生成されるため、このオプションはデフォルトで設定されます。
- オプションは前述と同じように機能します。
デフォルト値が存在しない場合、ジェネレータは(databaseType
のように)デフォルト値を設定することに注意してください。
JHipster Coreはまったく同じ動作をしてくれます。
例2:オ プションの使用
オプションのセクションを参照してください。
マイクロサービスワークフロー
マイクロサービスを扱うのは難しい作業ですが、JDLには、エンティティを適切に処理するためのオプションがいくつか用意されています。
microservice <エンティティ> with <マイクロサービスアプリの名前>
により、どのマイクロサービスでどのエンティティを生成するかを指定できます。
例えば、次のように設定します。
entity A
entity B
entity C
microservice A with firstMS
microservice B with secondMS
2つのJHipsterアプリケーション('firstMS'と'secondMS')を使用した場合、JDLファイルをインポートすると次のようになります。 次の2つのアプリケーションについて:
- 'firstMS'では、エンティティ
A
とC
が生成されます。 - 'secondMS'では、エンティティ
B
とC
が生成されます。
C
は両方で生成されます。なぜなら、このエンティティが生成される場所を指定するマイクロサービスオプションがない場合でも
両方のアプリケーションで生成されるからです。
このJDLをモノリスアプリケーションにインポートすると、すべてのエンティティが生成されます(このJDL内には、モノリスは制約に関する オプションが無いため)。
注:同じエンティティを2つの異なるマイクロサービスで生成したい場合は、JDLファイルを更新するのではなく、 その都度、複数のJDLファイルを作成することで実現できます。
上記の例は次のような記述はできません。
entity A
entity B
entity C
microservice * except B with firstMS
microservice * except A with secondMS
結果はこうなります。
- 'firstMS'では、エンティティ
C
のみが生成されます。 - 'secondMS'では、エンティティ
B
とC
が生成されます。
なぜなら、構文解析時に、あるオプションが別のオプションと重複する場合には、後者が優先されるからです。 JDLを使用してマイクロサービススタック全体の作成もできます。例としてこのブログを参照してください。
使用可能なアプリケーション構成オプション
JDLでサポートされているアプリケーションオプションは次のとおりです。
あなたが探しているものではありませんか?通常のオプションをチェックしてください。
JDLオプション名 | デフォルト値 | 指定可能な値 | コメント |
---|---|---|---|
applicationType | monolith | monolith, microservice, gateway | - |
authenticationType | jwt | jwt, session, oauth2 | jwt |
baseName | jhipster | - | - |
廃止予定 | blueprints を参照 | ||
blueprints | [] | 追加のBlueprintの名前。内部で公開されているカスタムブループリントも含む。Marketplaceを参照 | 使用するBlueprint配列。例:[blueprint1, blueprint2] |
buildTool | maven | maven, gradle | - |
cacheProvider | ehcache or hazelcast | caffeine, ehcache, hazelcast, infinispan, memcached, redis, no | モノリスやゲートウェイにはehcache、それ以外にはhazelcast |
clientFramework | angularX | angularX, angular, react, vue, svelte, no | - |
clientPackageManager | npm | npm | - |
clientTheme | none | 何かを指定もしくはnone | (yetiのように)動作することがわかっている場合は任意の値を設定できま す |
clientThemeVariant | - | 何かを指定もしくはprimary | (darkやlightのように)動作することがわかっている場合は任意の値を設定できます。空欄も可 |
databaseType | sql | sql, mongodb, cassandra, couchbase, no | - |
devDatabaseType | h2Disk | h2Disk, h2Memory | * + プロダクションデータベースのタイプ |
dtoSuffix | DTO | - | DTOsの接尾辞。falseで空文字列 |
enableHibernateCache | true | - | - |
enableSwaggerCodegen | false | - | - |
enableTranslation | true | - | - |
entitySuffix | - | - | エンティティの接尾辞。falseで空文字列 |
jhiPrefix | jhi | - | - |
languages | [en, fr] | JHipsterで使用可能な言語 | 中括弧は必須 |
messageBroker | no | kafka, pulsar, no | - |
nativeLanguage | en | JHipsterがサポートするすべての言語 | - |
packageName | com.mycompany.myapp | - | packageFolderオプションを設定 |
prodDatabaseType | mysql | mysql, mariadb, mssql, postgresql, oracle, no | - |
reactive | false | - | - |
searchEngine | no | elasticsearch, couchbase, no | - |
serverPort | 8080, 8081 or 9999 | - | アプリケーションのタイプに依存 |
serviceDiscoveryType | no | consul, eureka, no | - |
skipClient | false | - | - |
skipServer | false | - | - |
skipUserManagement | false | - | - |
testFrameworks | [] | cypress, protractor, cucumber, gatling | 中括弧は必須 |
websocket | no | spring-websocket, no | - |
関連項目
通常のオプションはここにあります。