問題タブ [java-ee-6]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - @RolesAllowed-Annotation の値パラメーターとして Enum 型を使用する
私はJavaエンタープライズアプリケーションを開発しています.現在、特定の機能へのアクセスを特定のユーザーに制限するためにJava EEセキュリティを行っています. アプリケーションサーバーとすべてを構成し、現在、メソッドを保護するために RolesAllowed アノテーションを使用しています。
このような注釈を使用すると、正常に機能します。
しかし、これは私が望んでいるものではありません。ここでは文字列を使用する必要があり、リファクタリングが難しくなり、タイプミスが発生する可能性があります。したがって、文字列を使用する代わりに、この注釈のパラメーターとして Enum 値を使用したいと思います。列挙型は次のようになります。
そこで、次のように Enum をパラメーターとして使用しようとしました。
しかし、Enum.name は文字列を返すだけですが、次のコンパイラ エラーが発生します (これは常に定数ですよね?)。
注釈属性 RolesAllowed.value の値は、定数式でなければなりません`
次に試したのは、追加の最終文字列を Enum に追加することでした。
ただし、これもパラメーターとして機能しないため、同じコンパイラ エラーが発生します。
希望する動作を実現するにはどうすればよいですか? 独自のアノテーションを使用するために独自のインターセプターも実装しました。これは美しいですが、このような小さな問題にはコード行が多すぎます。
免責事項
この質問はもともとScalaの質問でした。Scala が問題の原因ではないことがわかったので、まず Java でこれを実行してみます。
jakarta-ee - WAR パッケージ化されたアプリの @FacesConverter/Validator 内で Entitymanager/EJB を取得する
EJB 3.1 (アプリケーションは WAR としてパッケージ化されています) を使用して Glassfish v3.0.1 で実行されている JavaEE6 アプリケーションがあり、すべての EJB は @LocalBeans です。現在、私はJSF2で使用するためのFacesConverterを書いています.IDからEntityを取得するにはEntityManagerが必要です。
JEE6を使用している今、FacesConverter内にEntitymanagerを取得するための最良かつ最もクリーンな方法はどれでしょうか? または、Expression Language を介して EJB にアクセスすることはできますか? Weld/CDI は FacesConverter 内では機能しませんか?
申し訳ありませんが、これが重複していないことを願っていますが、ほとんどの場合、わずかに異なり、あまり役に立ちませんでした。
java - モジュラー アプリケーション (JPA) 用の単一の永続化ユニット
永続化の抽象化として JPA を使用するモジュラー (プラグインのような) アプリケーションを作成したいと考えており、このアプリケーションはサード パーティによって拡張可能である必要があります。
問題は、このアプリケーションとそのプラグインを他のデータベース/JPA プロバイダーに簡単に移植できるようにすることです。そのため、サード パーティ ベンダーは、使用されている JPA プロバイダー (またはデータベース接続) について何も知ることができず、永続レイヤーを拡張することしかできません。メインアプリの永続化ユニットに保存される新しいエンティティを定義することにより(これにより、新しいデータベースを指すようにすべてのモジュールを再構成することなく、データベースを切り替えることができます)。
JPAでそのようなことはできますか?.NET の nHibernate (およびおそらく Hibernate) を使用すると簡単に実行できますが、Java EE 環境にいるため、JPA に対してプログラミングすることを好みます。
java - WAR専用としてデプロイされたEJB3.1アプリケーション:ejb-jar.xmlはどうですか?
WebスタッフとEJBで構成され、WARのみ(EJB3.1を使用)としてデプロイされるJavaEE6アプリケーションがあります。ビルドはMavenに基づいています。ここで、Java EE 6でモジュールの初期化を注文する新しい可能性について読みました。これは、アプリケーションにも必要です。また、XMLでいくつかのEJBプロパティを定義するオプションが欲しいです。
この例はEARプロジェクトとしてデプロイされているため、順序はapplication.xmlで定義されています。ただし、WARでデプロイされたプロジェクトには、application.xmlはありません。今、私はそのような情報をどこで定義できるのだろうか?または、WAR-deployed-appでapplication.xmlを使用することは可能ですか?
編集:
モジュールの順序の例を正しく読んでいませんでした。最初の瞬間、アプリのEJBが読み込まれる順序について考えました。もちろん、WARアプリにはモジュールが1つしかないので、順序付けは意味がありません。
わかりました、しかし私がそれをしているとき、1つの大きな質問が残っています(変更を反映するために質問のタイトルも変更されました):ejb-jar.xmlはどうですか?どういうわけかXMLでEJBに関するものを定義できますか(再コンパイルを避けるために、いくつかの設定に役立ちます)?
jakarta-ee - JavaEE セキュリティ、アクセス制限ページ: ログアウトしたユーザーは正しくリダイレクトされます。ログインしているユーザーではありません
私のアプリは Glassfish 3.0.1 で動作する Java EE 6 アプリケーションです。
JDBC Realm で Java EE Security を使用しています。そこで、いくつかの Web ページに制限を追加しました。次の login-config と security-constraint を web.xml に追加しました。
ユーザーがログアウトしている場合、これは正常に機能します。/deanery/ のページにアクセスしようとすると、index.jsp (jsf にリダイレクト) にリダイレクトされます。
ユーザーがログインして適切な役割を取得すると、制限されたリソースに正常にアクセスできます。だからここまでは大丈夫。
問題: 権限の低いユーザー (私の例では学生) がアプリケーションにログインし、制限されたページにアクセスしようとすると、web.xml で構成されたエラー ページにリダイレクトされません。代わりに、醜い Glassfish 403 ページが表示されます。
HTTP ステータス 403 - 要求されたリソースへのアクセスが拒否されました
残念ながら、私のCustomExceptionHandlerで例外をキャッチするオプションはないようです。私のserver.logにも表示されません(ただし、最高レベルに切り替えました)。
ユーザーが 403 ページを表示する代わりにエラー ページにリダイレクトされるようにするにはどうすればよいですか? ユーザーがログアウトしたときのように、ユーザーが index.jsp にリダイレクトされないのはなぜですか?
編集:
対応するコードを含むエラーページを web.xml に追加しようとしました。
効果はありません。自分のページではなく Glassfish のエラー ページが表示されます。
java - View で使用する @Asynchronous 関数の現在の進行状況を公開する
私の JEE6-App (Glassfish 3.0.1 で実行) には、大量のメールを送信する必要がある EmailEJB があります。メールは非同期で送信されるため、新しい EJB3.1 @Asynchronous で注釈が付けられ、別のスレッドで実行できます。ここで、メソッドの現在のステータスについてユーザーに通知する必要があります。すでに送信されたメールの数は?
メールの非同期送信は正常に機能しますが、進行状況を外部からアクセスできるようにする方法がわかりません。それを行うための私のアプローチはかなり間違っているようですが、どういうわけかそれが可能でなければなりません(おそらく別のアプローチ)。これは私の EmailEJB が現在どのように見えるかです (疑似コードのようなものですが、私が望むものを説明しています):
リターンでキャンセルせずに、非同期関数内で現在の進行状況を返すにはどうすればよいですか? 関数内のループの進行状況をユーザーに表示するにはどうすればよいですか? 別の非同期メソッドが必要ですか? ヒントはありますか?
scala - 新しいscala2.8.0ネストされたアノテーションの使用方法
scala 2.8.0がリリースされたとき、永続化レイヤーでネストされた@annotationsを使用できるように見えます。しかし、どのように?誰かがこれをjavaからscalaに変換してくれませんか?ありがとう。
p>asynchronous - EJB3.1 @Asynchronous の使用時に ConcurrentModificationExceptions を回避する方法
[私の設定: Java EE 6 アプリケーション、EJB3.1、CDI/Weld、Glassfish 3.0.1 で動作する JSF2 を使用]
EJB3.1 の新しい @Asynchronous メソッドに関する記事をいくつか読みましたが、非同期メソッドの危険性や、実際に注意する必要があることについて言及した記事はありませんでした。
私のアプリでは、@Asynchronous E-Mail サービスを使用して、大量のメールを送信しています。このサービスを CDI/Weld Bean から呼び出しています。テスト中に ConcurrentModificationExceptions が頻繁に発生しましたが、今までのところ、クラッシュする場所と理由がよくわかりません。
私の Beans が大まかにどのように見えるかを示すために、重要な部分は次のとおりです。
私のCDI-Beanでは、このEJBを次のように使用しています(進行状況をJSF2に公開しています):
私は一般的に尋ねたかっただけです:私はここで何か完全に間違ったことをしていますか(スコープ、インジェクション、フューチャーの使用)? ConcurrentModificationExceptions を回避するために、@Asynchronous メソッドを使用する場合、何に注意する必要がありますか?
電子メールを EJB として注入しています。EmailEJB 全体を Asynchronous にして @Inject @Asynchronous で注入したほうがよいでしょうか? 違いは何ですか?
どんなヒントでも大歓迎です!
java - EJBを動的に検索する
Glassfish3でアプリケーションを開発しています。次のようなEJBがあります。
私のクライアントコード(同じアプリケーション内で実行されている)は次のようになります。
いくつかの情報源によると、これは有効なルックアップメソッドであるはずですが、NameNotFoundExceptionをスローします。私は何が間違っているのですか?
dependency-injection - Java EE 6: CDI への切り替え - 最高のリソース
小さいながらも完全な Java EE 6 アプリケーションが手元にあります。
従来の注釈が使用されています : @Resource
, @EJB
, @Singleton
, @PostConstruct
, @PreDestroy
, @PersistenceContext
, @ManagedBean
, @ManagedProperty
, ...@RequestScope
@ApplicationScope
CDI を導入することが理にかなっているかどうかを評価し、依存性注入、Bean ライフサイクル管理などの共通戦略を標準化することを検討したいと思います。
質問:従来の Java EE 6 アノテーションを CDI アノテーションに変換する優れた記事、例、またはマニュアルを知っている人はいますか?