問題タブ [active-objects]
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 - アクティブなオブジェクト @Implementation アノテーションの再帰
アクティブ オブジェクト ライブラリ ( https://java.net/projects/activeobjects/pages/Home ) に問題があります。
次のような ao エンティティがあるとします。
そして、このエンティティの実装クラス:
問題はPersonImpl
授業中です。無限再帰が発生するためですperson.getName()
(implクラスは常に呼び出されます)。PersonImpl
(クラス内で)実装の呼び出しをスキップして、データベースから名前を取得するにはどうすればよいですか?
c++ - アクティブなオブジェクトの戻り値
さかのぼる 2010 年、Herb Sutter はDr. Dobbに関する記事で、ネイキッド スレッドの代わりにアクティブ オブジェクトの使用を提唱しました。
C++11 バージョンは次のとおりです。
クラスは次のように使用できます。
void 以外の戻り値の型を持つメンバー関数をサポートしたいと考えています。しかし、これを実装するための優れた設計を思いつくことはできません。つまり、異種の型のオブジェクトを保持できるコンテナ ( などboost::any
) を使用しなければなりません。
std::future
どんなアイデアでも大歓迎です。特に、や などの C++11 機能を利用する回答ですstd::promise
。
java - アクティブ オブジェクトの 2 列の組み合わせに対する一意の制約
Active Objects を使用して開発を行っており、テーブルに 4 つの列があります。2 つの列の組み合わせが常に一意になるように制約を設定する必要があるという要件があります。
ここでの要件は、ItemId と ItemName の組み合わせに一意の制約が必要であることです。
検索を試みましたが、net.java.ao.schema.Unique クラスを使用して単一の列を一意にする方法しか見つかりませんでした。
これをどのように達成できるかについて、誰かが正しい方向に私を向けることができますか?
ありがとう
java - 配列フィールドのセッターを追加するときにActiveObjectsが例外をスローする
ビルド サーバーの統合のために Atlassian Stash プラグインをフォークしました。このプラグインは、データの保存に ActiveObjects コンポーネントを使用します。次の問題があります。
他のフィールドに従って、このように OneToMany フィールドにゲッターとセッターを追加すると
エンティティを使用すると、次の例外が発生します。
問題をグーグルで検索すると、この投稿で提案されているようにセッターを削除する解決策しか見つかりませんでした。ただし、構成が既に存在する場合は、フィールドを設定する可能性がなくなります。ActiveObject を削除して新しいものを保存することは、ここに行く方法ではないと思います。
この問題を解決するにはどうすればよいですか? または、可能でない場合、ActiveObjects でセッターを使用せずに既存のオブジェクトを更新する方法は?
unit-testing - Spock モックは、gpars のアクティブ オブジェクト メソッドで呼び出されたときに呼び出されないようです。
私のコードには 2 つのクラスがあります。1 つは DynamicRule と呼ばれるもので、もう 1 つはルール インスタンスに GPARS activeObject ラッパーを提供する AORule と呼ばれるラッパーです。
DynamicRule はこれに少し似ています - dynamicExecute と呼ばれるメソッドを使用します
GPARS activeObject を使用してDynamicRule rule
参照の状態を管理するこの AORule のラッパー クラスがあります。execute()
メソッドは非同期の activeObject メソッドを呼び出して、内部rule
参照でアクションをトリガーします。
これが自分自身で機能していることを示すために、いくつかのテストを作成しようとしましたが、失敗しました。mockres
私は 2 つの簡単なテストを実行しようとしましたが、1 つは dynamicRule 自体で機能します。期待値を設定し、モックにクロージャーを呼び出して変数に対するそのクロージャーの副作用をテストするように依頼します。すべて期待どおりに機能します。
2 番目のテストでは、モックをセットアップして aorule.rule インスタンスに設定し、モックの期待値を設定し、アクティブなメソッドaorule.execute()
を呼び出すメソッドを呼び出し、それが私のモックを呼び出しますactiveExecute()
これは失敗します - モックでクロージャーが実行されず、 then: アサーション テストが失敗する理由。
ここに出力トレースの一部を含めました - これがaorule.execute()
activeObject メソッドをトリガーすることactiveExec : rule dump looks like
がわかります。 of val など)、スタブ クロージャは呼び出されず、mockres は設定されません - テストは失敗します
私はこれをトレースしようとしているか、デバッガーで監視しようとしましたが、役に立ちませんでした。スタブのクロージャがトリガーされません - テストが失敗します。
デバッガーでもう一度見ようとしたところ、行を過ぎたときに
デバッガーはInternalActor.handleCurrentMessage()
、GPAR のどこかでエラー ハンドラーにジャンプします。これを変更しても違いはありません
私はこれを理解していません。おそらく私は何かばかげたことをしていますが、@ActiveMethod - activeExecute()
モックを使用してコードをテストするためのテストを書くことができません (手作りのクラスなどを介してこれを実行しようとしましたが、シミュレートされたテストを機能させることができません.
テストを正しく修正して実行するにはどうすればよいですか? 私が知る限り-スクリプトでコードを実行すると(「ライブ」テスト)、コードはやりたいことを実行しているように見えますが、それを示すための単体テストを作成することはできません
追記: ActiveMethod のラッピングに関係しています - よくわかりません
次のようにテスト スクリプトに 2 つのダミー ラッパー クラスを作成しましたdynamicExecute()
。AOWrappersは@ActiveMethod
同じスクリプト ファイル内の 2 つのテストは次のようになります
テストを実行すると、最初のテストは問題なく成功し、2 番目のテストは失敗し、myclos
は呼び出されません。次に何を試せばいいですか?
質問への説明
私はこれを 1 つのグルーヴィーなテスト ファイルにまとめてみました。
注意すべき重要な点は、最後のテストです。Mock でクロージャーの出力を実行するという期待を設定しました。これによりmockres
変数が更新され、then: 句で設定されていると断言できます。
テストを呼び出すと、@ActiveMethod execute()
このように失敗します
これは、モックレスがクロージャー呼び出しによって設定されなかったことを示しています。
次の aowrule.exec() 行のコメントを外すexec()
と、ActiveMethod が使用する非表示のアクターを使用せずに、委任された呼び出しが直接呼び出されます。その次の行を実行すると、クロージャーが正しく呼び出され、モックが設定されます。
したがって、問題には、その背後にある隠れたアクターを介してこれを行うときにモックが機能することをテストしようとする何かがあり@ActiveMothod
ます。
実際には、スクリプトとして実行するだけでコードが期待どおりに機能していると思います(コードでの実際の使用)。ただし、ActiveMethod が呼び出されたときに期待される動作を証明するテストを作成できないようです。
GPAR のような非同期コードのモックを使用してスポック テストを作成するには、何か賢いことをしなければならないのでしょうか。
mysql - postgres と mysql での一般的な大文字検索が機能しない
あらゆる種類のデータベースにあるテーブルを簡単に検索しようとしています。次のクエリはほとんどのデータベースで機能していますが、mysql で機能するソリューションが見つかりません。データベース内のテーブルはアクティブ オブジェクト フレームワークによって生成されるため、それらのインスタンスの名前や構成を変更することはできません。
以下は、MySQL 以外のすべてのデータベースで正常に機能するクエリです。
select * from "AO_69D057_FILTER" where "SHARED" = true AND "CONTAINS_PROJECT" = true AND UPPER("FILTER_NAME") like UPPER('%pr%').
何らかの理由で、MySql はテーブル名を二重引用符で囲むことができません。引用符で囲まれていないテーブル名を使用すると、MySQL では機能しますが、Postgres では機能しません。引用符で囲まれていないため、Postgres はテーブル名を小文字に変換しています。AO はテーブル名を大文字で生成しています。
エイリアスも使用しようとしましたが、ステートメントの評価階層のために機能しません。
テーブル名の問題を解決する方法はありますか?