nimbus-org / nimbus Goto Github PK
View Code? Open in Web Editor NEWNimbus Framework
License: BSD 3-Clause "New" or "Revised" License
Nimbus Framework
License: BSD 3-Clause "New" or "Revised" License
・不具合、課題を管理する
・集計、レポーティングを出力する
・DBやファイル等の保存方法別のいくつかの実装を作成する
nimbus-20170308.061046
nimbus-20170814.105659
の差分において、
クラス名:jp.ossc.nimbus.service.keepalive.ClusterService
設定・確認:
【null は null のまま扱いたいです】
現行利用しているバージョン:nimbus-20120203.075817.jar
新しいバージョンのNimbusを利用しているのですが、下記の現新差異が出ております。
現行のままnullで取得可能は代替手段はありますでしょうか?
────────────────────────────────────────────────────────────
Beanflowから返却されたDataSet(レスポンスオブジェクト)を java.io.InputStream に変換している箇所があり、その変換最中に null → 0 が起こっていました。
InputStream に変換: jp.ossc.nimbus.util.converter.StreamConverter#convertToStream(responseObj) を呼び出し InputStream を取得。
取得する InputStream は DataSet → JSON形式の文字列 → byte[] → InputStream と変化され生成されていました。
DataSet → JSON形式の文字列 の最中に起こっており、該当するメソッドは
クラス:jp.ossc.nimbus.util.converter.DataSetJSONConverter
メソッド:private StringBuilder appendValue(StringBuilder buf, Class type, Object value)
となります。
このメソッド内で、値がnullの場合、型を判定しその判定結果に応じて、値を補完していました。
現行と比較すると下記のような判定方法となっております。
・現行 :nimbus-20120203.075817.jar
581行目:
}else if(type.isPrimitive()
&& (Byte.TYPE.equals(type) || Short.TYPE.equals(type) || Integer.TYPE.equals(type) || Long.TYPE.equals(type) || Float.TYPE.equals(type) || Double.TYPE.equals(type))
){
buf.append('0');
・新:nimbus-20180223.014811.jar
935行目:
}else if(Number.class.isAssignableFrom(type) || (type.isPrimitive()
&& (Byte.TYPE.equals(type) || Short.TYPE.equals(type) || Integer.TYPE.equals(type) || Long.TYPE.equals(type) || Float.TYPE.equals(type) || Double.TYPE.equals(type)))
){
buf.append('0');
原因:Number.class.isAssignableFrom(type) の条件が追加された為、BigDecimal の場合、判定結果が true となり、null → 0 と補完されたようです。
おそらく、内部でBufferedOutputStreamを使っているが、バッファサイズが1024固定なため、大きなオブジェクトを直列化すると、TCPの書き込み回数が増えて、遅くなるものと思われる。
バッファサイズを、設定できる機能を追加するか、バッファサイズを自動的に拡張していくような仕組みが必要ではないか?
入力ストリームから読みだして、出力ストリームに書き出すBindingConverterインタフェースの実装クラスが欲しい。
GitTestResourceManagerServiceでチェックアウトするときに、テストリソースのみをリソースとしてコピーできない。
Nimbus Publisherを使って、メッセージを受信した側で、1メッセージから複数のメッセージに増幅したり、メッセージをフィルタリングしたりしたい。
テストリソース内で、URLを編集したい。
同じConnectionFactoryを使って複数のConnectionを作ったときに、1番最初か1番最後かの1つのConnectionしかNimbus-Consoleに表示されない。
DataSetServletRequestParameterConverterのconvertメソッドの以下は&&が正しいですか?
contentType != null があるので、multipart処理に入らないです。
L355
if(contentType != null || (!contentType.toLowerCase().startsWith(MULTIPART))){
paramMap = request.getParameterMap();
}else{
DataSetServletRequestParameterConverterが、multipart/form-dataのリクエストを処理できないので、処理できるように拡張して欲しい。
・プロパティのセッター、ゲッターがジェネリクスを使用してる場合の対応
・変換対象のブジェクトのインスタンスが存在する場合の対応
今はbyte[]が返ってくるが、これもBLOBのようにInputStreamで扱いたい。
一部のソース修正し、コンパイルする際に、すべてのソースが再コンパイル対象となる
Sessionが破棄されるタイミングと処理が動くタイミングによって、発生する可能性がある。
NimbusExternalizerServiceで、java.sql.Timestampを直列化して、非直列化すると、時刻が異なる時刻になってしまう。
相手のシステムによって、HTTPの応答ステータスを例外扱い(システムエラー相当)して良い場合がある。
但し、どのステータスが、例外扱いして良いかは、システムにより異なる。
また、URLによって異なる場合もある。
それらを加味したうえで、サービスの定義レベルで、このステータスは、例外扱いにして良い(または、このステータス以外は例外扱いして良い)という設定ができるようにして欲しい。
DistributedSharedContextServiceのメソッドが、thisに対してsynchronizedなメソッドが多いため、ロックされてしまっている。
DefaultPropertySchemaの制約は、Jexlで書くことができるが、表現能力が限られている。サービスで定義したInterpreterで、制約式を評価することができるようにして欲しい。
TransactionManagerのトランザクションタイムアウトのデフォルト値を設定できるようにしたい
Spring mvcとNimbusを連携するためのControllerが欲しいです。
制約は以下です。
・@なし
・RESTにもJSPにも対応
以下のエラーが発生します。急いで改修をお願いします。
java.lang.NoClassDefFoundError: sun/reflect/ReflectionFactory$GetReflectionFactoryAction
at jp.ossc.nimbus.service.io.NimbusExternalizerService$MetaClass.(NimbusExternalizerService.java:848)
at jp.ossc.nimbus.service.io.NimbusExternalizerService$NimbusObjectOutputStream.writeObjectOverride(NimbusExternalizerService.java:244)
at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:345)
CSVCompareEvaluateActionServiceで、特定のCSV要素自体を無視する事はできるが、
CSV要素内の特定文字列のみを無視する機能が欲しい。
画面がごちゃごちゃしている。
ステータス更新後、再度検索しないといけない。
PasswordをHashしてDBに格納するときなどに使いたいです。
TestFrameworkでクライアントにあるリソースをHTTPのアップロードを使用して
サーバのリソースマネージャにアップロードする機能を作成する。
テストリソースのresourceタグ内に、xmlエスケープ対象文字を書きたい時に、エスケープするのが面倒なので、BeanFlowと同じようにXMLコメントアウトをresourceタグに書けるようにして欲しい。
Java8でのJavadoc生成でエラーが発生する。
@y-kunisaki
テスト実施前後でDBのバックアップとリストアが行える機能がほいしい。
テーブル単位でのバックアップ、リストアで複数テーブルしていしたい。
複数テーブルを指定した際には、テーブル間の依存関係をOFFにした後のリストアが必要。
CVSTestResourceManagerのGit版を作成する。
できればSVN版もほしい。
Multipartの場合、パラメータにboundaryが入ってきてしまうため。
nimbus-websocketのリポジトリを作成し、そっちに移動する。
jarを別にすることで、Tomcatなどのアプリケーションサーバで自動でWebsocketがホスティングされることを防ぐ。
現在は、jarを作成する際に、websocket.enableのプロパティをON/OFFしているが、jarにWebsocketのClassが含まれているかは展開しないとわからない。
シナリオグループ、シナリオ、テストケースの実行中にActionのステータスがわかる仕組みを検討する。
以下のように実行すると、例外が発生する。
bsh % import jp.ossc.nimbus.service.io.*;
bsh % NimbusExternalizerService ext = new NimbusExternalizerService();
bsh % ext.create();
bsh % ext.start();
bsh % import java.io.*;
bsh % ByteArrayOutputStream baos = new ByteArrayOutputStream();
bsh % ext.writeExternal(String.class, baos);
bsh % ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
bsh % print(ext.readExternal(bais));
java.lang.IllegalAccessError: java.lang.Class
at sun.reflect.GeneratedSerializationConstructorAccessor4.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at jp.ossc.nimbus.service.io.NimbusExternalizerService$MetaClass.newInstance(NimbusExternalizerService.java:1081)
at jp.ossc.nimbus.service.io.NimbusExternalizerService$NimbusObjectInputStream.readObjectOverride(NimbusExternalizerService.java:522)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:421)
at jp.ossc.nimbus.service.io.SerializableExternalizerService.readInternal(SerializableExternalizerService.java:490)
at jp.ossc.nimbus.service.io.SerializableExternalizerService.readExternal(SerializableExternalizerService.java:428)
at jp.ossc.nimbus.service.io.SerializableExternalizerService.readExternal(SerializableExternalizerService.java:404)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at bsh.Reflect.invokeMethod(Unknown Source)
at bsh.Reflect.invokeObjectMethod(Unknown Source)
at bsh.Name.invokeMethod(Unknown Source)
at bsh.BSHMethodInvocation.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHArguments.getArguments(Unknown Source)
at bsh.BSHMethodInvocation.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.Interpreter.run(Unknown Source)
at bsh.Interpreter.main(Unknown Source)
「Comparison method violates its general contract!」のエラーが発生する場合がある。
調べたところ、「Java6ではこのエラーは出なかったが、Java7へバージョンアップした際にソートアルゴリズムが変わりこのエラーが出るようになる」とのこと。
JBOSS起動時のオプションで1.6相当のソートアルゴリズムを使用するオプションに変更することで対策をとっているが、根本的な対策はあるか?
以下、エラーログです。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2018-03-11 11:35:00,982 INFO [STDOUT] 2018/03/11 11:35:00,UNKNOWN,FRAMEWORK_ERROR,[TPS_00002]Topic publish error. Retry out.
java.lang.IllegalArgumentException: Comparison method violates its general contract!
java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:835)
java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:453)
java.util.ComparableTimSort.mergeCollapse(ComparableTimSort.java:376)
java.util.ComparableTimSort.sort(ComparableTimSort.java:182)
java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
java.util.Arrays.sort(Arrays.java:472)
java.util.Collections.sort(Collections.java:155)
jp.ossc.nimbus.service.publish.DistributedServerConnectionImpl.selectConnection(DistributedServerConnectionImpl.java:71)
jp.ossc.nimbus.service.publish.DistributedServerConnectionImpl.send(DistributedServerConnectionImpl.java:80)
jp.co.nri.its.feed.service.publisher.ServerConnectionPublisherService.publish(ServerConnectionPublisherService.java:85)
jp.co.nri.its.feed.service.publisher.CulledPublisherService$Checker.consume(CulledPublisherService.java:147)
jp.ossc.nimbus.daemon.Daemon.run(Daemon.java:505)
java.lang.Thread.run(Thread.java:745)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SSHでコマンド実行するテストアクションが欲しい。
JMSに送信するTestActionが欲しい。
keyset画面のRemoveボタンのカラムが崩れる
バイナリファイルを比較するTestEvaluateActionが欲しい。
<if>
<while>
<if>
<break/> ←ここでbreakすると
</if>
</while>
<step> ←このステップが実行されない
</step>
<if>
RandomAccessをimplementsする
BeanShellInterpreterServiceには、コマンドからスクリプトを実行する機能がある。
ScriptEngineInterpreterServiceにも、同様のものが欲しい。
TestSwingRunnerの画面から、サービス定義に書いたTestReporter(複数存在する)をコンボボックスで選択して、レポート出力を行うボタンが欲しい。
テストフレームワークを使用しているとたまに正常に動作しないことがある。
品質向上を行う必要がある。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.