前述の例では 2 種類のコンポーネント宣言メソッドを XML 名前空間を使うものと使わないものに修正しています。 以下に名前空間を使用しない典型的な components.xml
ファイルを示します。
<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://jboss.com/products/seam/components"
xsi:schemaLocation=
"http://jboss.com/products/seam/components
http://jboss.com/products/seam/components-2.2.xsd">
<component class="org.jboss.seam.core.init">
<property name="debug">true</property>
<property name="jndiPattern">@jndiPattern@</property>
</component>
</components>
<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://jboss.com/products/seam/components"
xsi:schemaLocation=
"http://jboss.com/products/seam/components
http://jboss.com/products/seam/components-2.2.xsd">
<component class="org.jboss.seam.core.init">
<property name="debug">true</property>
<property name="jndiPattern">@jndiPattern@</property>
</component>
</components>
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
ご覧の通りこのコードは冗長です。 さらにコンポーネントと属性の名前がデプロイメント時に確認できません。
名前空間を使用すると、
<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://jboss.com/products/seam/core
http://jboss.com/products/seam/core-2.2.xsd
http://jboss.com/products/seam/components
http://jboss.com/products/seam/components-2.2.xsd">
<core:init debug="true" jndi-pattern="@jndiPattern@"/>
</components>
<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://jboss.com/products/seam/core
http://jboss.com/products/seam/core-2.2.xsd
http://jboss.com/products/seam/components
http://jboss.com/products/seam/components-2.2.xsd">
<core:init debug="true" jndi-pattern="@jndiPattern@"/>
</components>
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
スキーマ宣言は冗長ではありますが、 XML の内容自体は簡潔かつ理解しやすいものになります。 このスキーマは各コンポーネントと利用可能な属性に関する詳細情報を与えて、 XML エディタによるインテリジェントな自動補完入力を可能にします。 名前空間付きのエレメントの使用により、適切な components.xml
ファイルの生成と保守が容易になります。
これは組み込みの Seam コンポーネントに対しては良く機能しますが、 ユーザーのコンポーネントに対してはオプションが 2 つあります。 最初に Seam は両方の混在したモデルに対応することで、ユーザーのコンポーネントには汎用の <component>
宣言を使用できるようにし、 また組み込みコンポーネントには名前空間が付いた宣言が使用できるようにしています。 さらに重要な点は、 Seam により独自のコンポーネントに対して簡単に名前空間を宣言できるということです。
いずれの Java パッケージにも @Namespace
アノテーションをパッケージに付加することによって XML 名前空間を関連付けることができます (パッケージレベルのアノテーションはパッケージディレクトリ内の package-info.java
という名前のファイルに宣言します)。seampay デモからの例を示します。
@Namespace(value="http://jboss.com/products/seam/examples/ seampay") package org.jboss.seam.example.seampay; import org.jboss.seam.annotations.Namespace;
@Namespace(value="http://jboss.com/products/seam/examples/ seampay") package org.jboss.seam.example.seampay; import org.jboss.seam.annotations.Namespace;
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
components.xml
で名前空間のスタイルを使用するのはこんなに簡単です。 次のように記述できます。
<components xmlns="http://jboss.com/products/seam/components"
xmlns:pay="http://jboss.com/products/seam/examples/seampay"
... >
<pay:payment-home new-instance="#{newPayment}"
created-message="Created a new payment to #{newPayment.payee}" />
<pay:payment name="newPayment"
payee="Somebody"
account="#{selectedAccount}"
payment-date="#{currentDatetime}"
created-date="#{currentDatetime}" />
...
</components>
<components xmlns="http://jboss.com/products/seam/components"
xmlns:pay="http://jboss.com/products/seam/examples/seampay"
... >
<pay:payment-home new-instance="#{newPayment}"
created-message="Created a new payment to #{newPayment.payee}" />
<pay:payment name="newPayment"
payee="Somebody"
account="#{selectedAccount}"
payment-date="#{currentDatetime}"
created-date="#{currentDatetime}" />
...
</components>
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
または、
<components xmlns="http://jboss.com/products/seam/components"
xmlns:pay="http://jboss.com/products/seam/examples/seampay"
... >
<pay:payment-home>
<pay:new-instance>"#{newPayment}"</pay:new-instance>
<pay:created-message>
Created a new payment to #{newPayment.payee}
</pay:created-message>
</pay:payment-home>
<pay:payment name="newPayment">
<pay:payee>Somebody"</pay:payee>
<pay:account>#{selectedAccount}</pay:account>
<pay:payment-date>#{currentDatetime}</pay:payment-date>
<pay:created-date>#{currentDatetime}</pay:created-date>
</pay:payment>
...
</components>
<components xmlns="http://jboss.com/products/seam/components"
xmlns:pay="http://jboss.com/products/seam/examples/seampay"
... >
<pay:payment-home>
<pay:new-instance>"#{newPayment}"</pay:new-instance>
<pay:created-message>
Created a new payment to #{newPayment.payee}
</pay:created-message>
</pay:payment-home>
<pay:payment name="newPayment">
<pay:payee>Somebody"</pay:payee>
<pay:account>#{selectedAccount}</pay:account>
<pay:payment-date>#{currentDatetime}</pay:payment-date>
<pay:created-date>#{currentDatetime}</pay:created-date>
</pay:payment>
...
</components>
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
前述の例では名前空間付きエレメントの 2 種類の使用モデルを説明しています。 最初の宣言では <pay:payment-home>
が paymentHome
コンポーネントを参照しています。
package org.jboss.seam.example.seampay;
...
@Name("paymentHome")
public class PaymentController extends EntityHome<Payment> {
...
}
package org.jboss.seam.example.seampay;
...
@Name("paymentHome")
public class PaymentController extends EntityHome<Payment> {
...
}
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
そのエレメント名はコンポーネント名をハイフンで連結した形式です。 そのエレメントの属性はプロパティ名をハイフンで連結した形式です。
2 番目の宣言では、 <pay:payment>
エレメントが org.jboss.seam.example.seampay
パッケージにある Payment
クラスを参照しています。 この場合 Payment
は Seam コンポーネントとして宣言されているエンティティです。
package org.jboss.seam.example.seampay;
...
@Entity
public class Payment implements Serializable {
...
}
package org.jboss.seam.example.seampay;
...
@Entity
public class Payment implements Serializable {
...
}
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
ユーザー定義のコンポーネントに対して妥当性検証と自動補完入力を機能させるにはスキーマが必要になります。 Seam は複数のコンポーネントからなるセットに対してはまだスキーマを自動的には生成できないため、 手動で作成しなければなりません。 参考として標準的な Seam パッケージ用のスキーマ定義を使用できます。
次は Seam によって使用される名前空間です。
components — http://jboss.com/products/seam/components
core — http://jboss.com/products/seam/core
drools — http://jboss.com/products/seam/drools
framework — http://jboss.com/products/seam/framework
jms — http://jboss.com/products/seam/jms
remoting — http://jboss.com/products/seam/remoting
theme — http://jboss.com/products/seam/theme
security — http://jboss.com/products/seam/security
mail — http://jboss.com/products/seam/mail
web — http://jboss.com/products/seam/web
pdf — http://jboss.com/products/seam/pdf
spring — http://jboss.com/products/seam/spring