EJB3.1のJNDI名

EJB3.1 Public Draftによれば、LocalのEJBに対してグローバルなJNDI名が取り決められました。その規約は

java:global[/]//

だそうです。
app-nameのデフォルトはearファイルの名前、module-nameのデフォルトは対象EJBが入っているejb-jarファイルの名前、そしてbean-nameはEJBクラス名(パッケージ名は含まれない)になります。
例えば、test.earの中にtestejb.jarがあってその中にtest.ejb.TestBeanというEJBがあったとすると、そのEJBを取得するJNDI名は

java:global/test/testejb/TestBean

となるのだそうです。bean-nameはアノテーションで上書き可能です。
これがwarだったらどうなるかというと、app-nameは省略、module-nameはwarの名前になるようですね。
testweb.warの中にtest.ejb.TestBeanというEJBがあるとすると、JNDI名は

java:global/testweb/TestBean

となる模様。
・・・実際GlassFish V3 Preludeで試してみたところ、warはこの通りに動きました。
・・・ですが、war名というのはデプロイ時に決まるものなので、それをJNDI名としてベタ書きしてしまうと拙い気が・・・
ちなみに、warの場合、web.xmlのdisplay-nameでこの名前を上書きできるようです。
web.xmlの値を取得し、display-nameとBean名の組み合わせでJNDI名を決定するようにすれば大丈夫かも。たしかServlet3.0でweb.xmlの値が取得できるとか言ってたような・・・
(追記)ServletContext#getServletContextName()でweb.xmlのdisplay-nameが取得出来るのを忘れてました。というわけで名前については問題なさそうです。
これでようやくEJBをJSF以外のFWと組み合わせる道が出来たということでしょうか。まぁ遅過ぎた感もありますが。