問題タブ [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 - EJB を適切に使用していますか?
JPA 2.0、JSF 2.0、EJB 3.1 などを含む JEE6 スタックを使用しています。
私のアーキテクチャのセットアップ方法は次のとおりです。
JPAプロバイダーとしてhibernateを使用して、JPAアノテーション付きDAOを持っています。facelet/xhtml ページに対応する JSF Managed Bean があります。すべてのデータベース要求を処理する EJB があります。
私の XHTML ページには、マネージド Bean を呼び出す JSF EL があります。マネージド Bean には、EJB によって管理される DAO エンティティへの参照が含まれています。たとえば、db テーブルにマップされたユーザー エンティティがあります。ユーザーを返すすべての CRUD 操作を処理するユーザー EJB があります。ユーザーを編集するページがあります。高レベルのワークフローは次のようになります: ユーザー編集ページに移動 -> EL は、ユーザーをロードするマネージド Bean にあるメソッドを呼び出します。このメソッドは、EJB から userEJB.loadUser(user) を呼び出して、データベースからユーザーを取得します。ユーザーが編集されて送信されます -> マネージド Bean で関数が呼び出され、EJB で関数が呼び出されてユーザーが保存されます。等
EJB を使用して JSF ページ内のデータにアクセスする際に問題が発生しています。遅延初期化エラーで多くの問題が発生しています。これは、セットアップ方法が原因であると考えています。
たとえば、遅延ロードされるユーザーのリストを持つ Client エンティティがあります。クライアントを取得するために、EJB でメソッドを呼び出します。このメソッドはデータベースにアクセスし、クライアントを見つけて返します。後で、このクライアントのユーザー リストにアクセスしたいのですが、そのためには、何らかのメソッドを呼び出して EJB に戻り、それらのユーザーをロードする必要があります (ユーザーは遅延ロードされるため)。これは、次のようなメソッドを作成する必要があることを意味します
このメソッドの唯一の目的は、ユーザーをロードすることです (そして、このアプローチが優れているか、機能するかについては確信が持てません)。私が自分でセッション管理を行っていた場合、リクエスト全体に対してセッションを開いたままにして、プロパティに直接アクセスしたいのですが、とにかくセッションが開いているので問題ありません.EJBには間接的なレイヤーが1つあるようです.それは私にとって物事を困難にしています。
コンテナーによって制御され、プールされ、無料でトランザクション管理を提供するなどの点で、EJB が好きです。しかし、EJB を正しく使用していないか、JSF アプリを正しく設定していないような気がします。
どんなフィードバックでも大歓迎です。
ありがとう、
java - JPQ出力を制限するにはどうすればよいですか?
クエリによって返されるエンティティの数を、JPAクエリ内の特定の値に制限する必要があります(JPQLを介して)。特に:
たとえば、sql(mysql構文)では、次のようにします。
出てくる唯一の解決策は、単にすべてのエンティティを取得してから、最初のエンティティを選択することです。これは問題外です。何か案は?
jsf - Richfaces a4j:2ページのロードを含む?
メインの JSF ページに、この一見無害なコードがあります。
サイドバーは次のように変化します。
jsFunction は、UserSession でページ (「sidebar2.jsp」など) を設定するバッキング Bean メソッドを呼び出します。
jsFunction には「rerender='sidebarContainer'」が含まれているため、正しいページがサイドバーに読み込まれます。
JBoss 5 で Web アプリケーションを最初に起動したときに、jsFunction を呼び出してページを変更すると、sidebar2 が表示されますが、その下に元のサイドバー (sidebar1.jsp) が表示されます。
この最初の奇妙さの後、サイドバーの切り替えは問題なく機能します。何かご意見は??
ejb-3.0 - EJB3.1 リモート呼び出し - 自動的に配布されますか? それは高価ですか?
私は、パフォーマンスとスケーラビリティを最優先に考えた JEE6 アプリケーションを構築しています。
ビジネス ロジックと JPA2 ファサードは、ステートレス セッション Bean (EJB3.1) で保持されます。現時点では、SLSB は インターフェースのみ @Remote
を実装しています。Bean が別の Bean にアクセスする必要がある場合、RMI を介してアクセスします。
この背後にある私の推論は、アプリケーションがクラスター化されたアプリケーションサーバーの束で実行されると、RMI 部分により実行がクラスター全体に自動的に分散されるという仮定です。
それは正しい仮定ですか?
その欠点(オブジェクトがentityManagerセッションを失い、値渡し)に対処しても問題ありませんが、少なくともそう思います。しかし、一定のリモート呼び出しが必要以上の負荷を追加していないかどうか疑問に思っています。
java - Javaサーブレットでアップロード速度を制限するにはどうすればよいですか?
私は、現在Spring Multipart Uploadを使用して実装されているファイルアップロード機能を備えたアプリ(Spring as DIおよびMVCフレームワークに基づく)に取り組んでいます(これは、commons fileupload libsを利用します)。
だから私が探しているのは、アップロード帯域幅の消費を減らす方法です。どうすればそれを達成できますか?
servlets - サーブレットへのjmsリソースの挿入とMDBのベストプラクティス
ejb 3.1、サーブレット3.0(glassfishサーバーv3)を使用
シナリオ:jmsメッセージをリッスンし、他のセッションBean(ステートレス)に処理を提供するMDBがあります。jmsリソースを注入するServelet。
質問1:静的宣言を使用するときにサーブレットがjmsリソースを挿入できないのはなぜですか?
と
私が得るエラーは次のとおりです:
[#| 2010-05-03T15:18:17.118 +0300|警告|glassfish3.0| javax.enterprise.system.container.web.com.sun.enterprise.web | _ThreadID = 35; _ThreadName = Thread-1; | StandardWrapperValve [WorkerServlet]:PWC1382:サーブレットWorkerServletの例外を割り当てますcom.sun.enterprise.container.common.spi.util.InjectionException:com.sunでクラスua.co.rufous.server.services.WorkerServiceImplの管理対象オブジェクトを作成中にエラーが発生しました。 company.container.common.impl.util.InjectionManagerImpl.createManagedObject(InjectionManagerImpl.java:312)at com.sun.enterprise.web.WebContainer.createServletInstance(WebContainer.java:709)atcom.sun.enterprise.web.WebModule。 createServletInstance(WebModule.java:1937)at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1252)原因:com.sun.enterprise.container.common.spi.util。InjectionException:未解決のMessage-Destination-Refua.co.rufous.server.services.WorkerServiceImpl/queue@java.lang.String@nullをcom.sunのクラスua.co.rufous.server.services.WorkerServiceImplに挿入しようとしたときに例外が発生しました.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:614)at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:384)at com.sun .enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:141)at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:127)at com.sun .enterprise.container.common.impl.util.InjectionManagerImpl.createManagedObject(InjectionManagerImpl.java:306)... 27その他原因:com.sun.enterprise.container.common.spi.util.InjectionException:インスタンスベースのインジェクションのみをサポートするクラスでの静的フィールドprivate staticjavax.jms.Queueua.co.rufous.server.services.WorkerServiceImpl.queueの不正使用com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:532)で... 31詳細|#]
私のMDB:
静的宣言がなくてもすべてが正常に機能します。
質問2:MDBを操作するためのベストプラクティスは何ですか:onMessage()で完全なリクエストを処理するか、onMessage()メソッドで別のBean(私の場合はステートレスBean)を呼び出して処理します。ソープサービスへの呼び出しをほとんど含まない処理なので、完全な処理時間は3秒になる可能性があります。
ありがとうございました。
java - eclipselinkで「null主キーが検出されました」例外を処理するにはどうすればよいですか?
...作業単位のクローンでヌルの主キーが検出されました..。
eclipselink(2.0.2 with 2.0 jpa)の例外は、文字通り、エンティティのidが<= 0(プリミティブ型の場合)であることを意味します。ここでのデバッグでは、すべてが正常であり、心配する必要はありません。私のASはglassfishv3です。そのような行動を引き起こす可能性のあるものを誰かが指摘できますか?
security - EJB3.1用のJAX-WSを使用した基本認証のデプロイメントの説明
JAX-WSを使用した基本認証の優れたチュートリアルがあります
ただし、Webベースのアプリケーション(war)のデプロイメントの説明について説明しています。ejb jarデプロイメントの説明に問題のない説明がありますか?
web.xmlの場合
注釈によるセキュリティルールの説明を見つけました-
GlassFishおよびJavaEE5SDKのセキュリティ注釈と承認
しかし、これで十分ですか?
あなたより!
java - ルックアップを呼び出さない新しいステートフルセッションBeanインスタンス
シナリオ:
手動ルックアップによってBeanを生成するメソッドがあります@Singleton UserFactory
(可能性があります)。@Stateless
createSession()
@Stateful UserSession
DIで注入している場合、メソッド@EJB
の呼び出し中に同じインスタンスを取得しますfromFactory()
(そうあるべきです)
私が欲しいのは、UserSession
ルックアップを実行せずにの新しいインスタンスを取得することです。
@Stateful
Q1:セッションBeanの新しいインスタンスを呼び出すにはどうすればよいですか?
コード:
私が理解しているように、
最善のアイデアではありません
Q2:本当ですか?
#
アップデート
目標
実際の目標は、ユーザーのセッションを管理するSessionsFactoryを作成することです(これはWebサービスユーザーです)。
セッション@StatefullBean:
ファクトリメソッドでは、@ Statefull UserSessionの新しいインスタンスを作成し、ユーザーごとに作成されたセッションの数を管理し、一定期間(30分)後にdestroySession()を呼び出します。
ユーザーのセッションリクエストの履歴を追跡する必要があり、後で履歴を保持します。
したがって、@StatefullBeanは私のニーズに対応する必要があると思います。しかし、JNDI名によるルックアップは、新しいejbが作成される唯一のチャンスであるように見えます。ルックアップなしでejbの新しいインスタンスを挿入する可能性を探してい
ます。また、マップ/コレクションにthrmを保持する代わりに、@StatefullUserSessionの現在作成されているインスタンスのコレクションを取得する可能性を探しています。
Q3:そうです..JNDIだけがejbの新しいインスタンスを作成するのに役立ちますか?
Q4:コンテナからいくつかのejb`sインスタンスのコレクションを取得することは可能ですか?
Glassfish v3、ejb3.1を使用しています。
java - コンテナーからいくつかの ejb のインスタンスのコレクションを取得することは可能ですか?
シナリオ:ユーザー セッション用の Beanが@Statefull
あります (HTTP セッションではなく、Web サービス セッションです)。また、ユーザーごとにユーザーのセッションを管理する必要があります。
目標:インスタンスのコレクションを取得し@Statefull UserSession
、ユーザーごとのセッションの最大数とセッションの存続時間を制御できるようにする必要があります。
質問:コレクションやマップなどに格納する代わりに、EJB コンテナーから EJB インスタンスのコレクションを取得することは可能ですか?
GlassFish v3、EJB 3.1、JAX-WS を使用しています。