問題タブ [janino]

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.

0 投票する
2 に答える
1181 参照

java - Scriptella:clobオブジェクトから動的にデータをフェッチし、それをデータベースに挿入するにはどうすればよいですか?

私はScriptellaを使用する初心者です。

私の要件は次のようなものです:

1)まず、非常に大きなxmlファイルがいくつかあり、そこからデータベースにデータを挿入する必要があります。そのため、xmlファイルをclobオブジェクトとして挿入することにしました。これが私が使用した構文です:

正常に実行されました。

2)次に、Clobデータをフェッチし、それをxpathクエリとして解析し、最後にxpathフィールドの下のテキスト値をデータベース列に抽出します。

そのために、次のように、クエリブロック内にjavajaninoブロックを記述しました。

私の質問は、「ノード」ノードリストでフェッチされたデータをデータベース列に挿入する必要があるということです。

どうやってやるの?

XMLの場合、「query」ブロック内にXpath式を記述し、フェッチされたxpathフィールドごとにデータをDBに挿入できます。

しかし、ここでは、データがClobオブジェクトにある場合、Xpathクエリからデータを抽出するにはどうすればよいですか?Clobデータを取得するにはJavaコードを使用する必要があります。しかし、その後、Scriptellaには別の制約があるため、データを挿入するにはどうすればよいですか。

スクリプトブロック内でスクリプトを使用することはできません。「get」は「script」ブロック内でのみ使用できるため、ここではscriptタグを使用する必要があります。

しかし、その後、グローバル変数を使用するように指示されます。しかし、別の問題があります。宣言するグローバル変数の数は?? 「ノード」ノードリスト内には多くのフィールドがあります。したがって、フィールドごとにグローバル変数を宣言することはできませんよね??

誰かが私にこの特定の問題についてのヒントを与えることができますか?Scriptellaで可能かどうか教えていただけますか?

0 投票する
2 に答える
5617 参照

logging - java.lang.NoSuchMethodError による Logback + Janino + Resin の問題

こんにちは、次のバージョンの logback と Janino を使用しています。

および条件を使用したロギング<if>構成は次のとおりです。

私が見るエラーは次のとおりです。

7:38:54,729 |-ch.qos.logback.classic.joran.action.RootLoggerAction の INFO - ROOT ロガーのレベルを INFO に設定 [ch.qos.logback.classic.LoggerContext] のインスタンス化に失敗しました 報告された例外: java.lang .NoSuchMethodError: org.codehaus.janino.ClassBodyEvaluator.setImplementedInterfaces([Ljava/lang/Class;)V at ch.qos.logback.core.joran.conditional.PropertyEvalScriptBuilder.build(PropertyEvalScriptBuilder.java:48) at ch.qos. logback.core.joran.conditional.IfAction.begin(IfAction.java:67) で ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:276) で ch.qos.logback.core で。 joran.spi.Interpreter.startElement(Interpreter.java:148) at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:130) at ch.qos.logback.core.joran.spi. ch.qos.logback.core の EventPlayer.play(EventPlayer.java:50)。ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:143) の joran.GenericConfigurator.doConfigure(GenericConfigurator.java:157) ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator. java:106) で ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:56) で ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75) で ch.qos でorg.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85) の .logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:148) org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:55) のorg.slf4j.LoggerFactory.bind(LoggerFactory.java:128) で org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:107) で org.slf4j.LoggerFactory.org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269) で getILoggerFactory(LoggerFactory.java:295) org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281) で

このエラーがスローされる理由はありますか?

0 投票する
2 に答える
1236 参照

expression-evaluation - juel 式の検証 (vs Janino)

すべての javax.el juel 専門家に電話する :-)

JUEL を使用して、純粋な Java コンテキストで式を評価したいと考えています。これらの式は通常、数学的なものであり、UI を介してユーザーによって提供されます。追加された側面は、これらの式が構成の一部であり、後で別のプロセスの一部として評価されるだけであるということです。また、式で使用される変数値は、このプロセスの一部として後でのみ使用できます。そのため、式の作成時にユーザーに基本的な検証を提供して、ユーザーが自分の式が評価時に失敗しないことを認識できるようにしたいと考えています。

以前はこれに Janino を使用していましたが、これを JUEL に置き換えています。はるかに高速です (そして、通過するために多くの評価があり、スループットが重要であるなど)。また、JUEL はまったく同じ式構文で動作します。つまり、バックエンドにプラグインでき、下位互換性があります。${..}(古い Janino 式を追加するだけです。

ただし、JUEL には 1 つの問題があります。使用されている式を評価する前に検証する方法はありますか?

つまり、次のようなものです:

を実行するとprintln(result)、3 が正しく出力されます。

Janino を使用すると、式 a+b をクックできますが、それが不正な形式であるか、不正な戻り値の型 (つまり double ではない) を返す場合、例外が発生します。次に、これを使用してその場でユーザー入力を検証し、構成を保存するなどの前にユーザーにエラーを修正させることができます。

JUELでこれを行う方法はありますか?または、別のアプローチを知っている人はいますか?

ありがとうございました、

ルーカス

0 投票する
1 に答える
296 参照

hadoop-yarn - Apache Twill を使用して YARN で Janino を使用すると、「インポートされたクラス xy をロードできませんでした」というメッセージが表示される

クラスの動的コンパイルに Janino を使用するオープン ソース プロジェクトを、Apache Twill を使用して YARN に移植しています。これは、最後のエラーを除いてうまく機能します。Janino をツイルで使用すると、クラスがクラスパスにあり、使用されているにもかかわらず、クラスが見つからないという例外が発生します。

私が得ている例外は次のとおりです。

2014-06-09T18:30:40,093Z エラー oadepipProjectRecordBatch [zk1] [37daf04b-7d82-4d2f-987c-59851f2aeafe:frag:0:0] AbstractSingleRecordBatch:next(AbstractSingleRecordBatch.java:60) - クエリ org.apache 中の失敗。 drill.exec.exception.SchemaChangeException: org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.setupNewSchema(ProjectRecordBatch.java:243) で生成されたクラスを org.apache.drill.exec.record で読み込もうとして失敗しました.AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java:57) at org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.next(ProjectRecordBatch.java:83) at org.apache.drill.exec.record.AbstractSingleRecordBatch.next (AbstractSingleRecordBatch.java:45) org.apache.drill.exec.physical.impl.limit.LimitRecordBatch.next(LimitRecordBatch.java:99) org.apache.drill.exec.record.AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java:45) で org.apache.drill.exec.physical.impl.svremover.RemovingRecordBatch.next(RemovingRecordBatch.java:94) で org .apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.next(ScreenCreator.java:80) org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:104) で java.util .concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) 原因: org.apache.drill.exec.exception.ClassTransformationException: 失敗svremover.RemovingRecordBatch.next(RemovingRecordBatch.java:94) at org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.next(ScreenCreator.java:80) at org.apache.drill.exec.work.fragment. FragmentExecutor.run(FragmentExecutor.java:104) で java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) で java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) で java.lang .Thread.run(Thread.java:744) 原因: org.apache.drill.exec.exception.ClassTransformationException: 失敗svremover.RemovingRecordBatch.next(RemovingRecordBatch.java:94) at org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.next(ScreenCreator.java:80) at org.apache.drill.exec.work.fragment. FragmentExecutor.run(FragmentExecutor.java:104) で java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) で java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) で java.lang .Thread.run(Thread.java:744) 原因: org.apache.drill.exec.exception.ClassTransformationException: 失敗runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) 原因: org.apache.drill .exec.exception.ClassTransformationException: 失敗runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) 原因: org.apache.drill .exec.exception.ClassTransformationException: 失敗

値の変換クラスの生成:

org.apache.drill.exec.compile.ClassTransformer.getImplementationClass(ClassTransformer.java:302) で org.apache.drill.exec.ops.FragmentContext.getImplementationClass(FragmentContext.java:185) で org.apache.drill.exec で.physical.impl.project.ProjectRecordBatch.setupNewSchema(ProjectRecordBatch.java:240) org.apache.drill.exec.record.AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java:57) org.apache.drill.exec.physical.impl .project.ProjectRecordBatch.next(ProjectRecordBatch.java:83) at org.apache.drill.exec.record.AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java:45) at org.apache.drill.exec.physical.impl.limit.LimitRecordBatch .next(LimitRecordBatch.java:99) at org.apache.drill.exec.record.AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java:45) at org.apache.drill.exec.physical.impl.svremover.RemovingRecordBatch.next(RemovingRecordBatch.java:94) at org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.next(ScreenCreator.java:80) at org.apache.drill.exec.work. fragment.FragmentExecutor.run(FragmentExecutor.java:104) で java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) で java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) で java .lang.Thread.run(Thread.java:744) 原因: org.codehaus.commons.compiler.CompileException: 行 4、列 8: インポートされたクラス "org.apache.drill.exec.exception.SchemaChangeException" could not be org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java:9014) で、org.codehaus.janino.UnitCompiler.import2(UnitCompiler.java:192) で、org.codehaus.janino.UnitCompiler でロードされます。access$000(UnitCompiler.java:104) at org.codehaus.janino.UnitCompiler$1.visitSingleTypeImportDeclaration(UnitCompiler.java:166) at org.codehaus.janino.Java$CompilationUnit$SingleTypeImportDeclaration.accept(Java.java:171) at org .codehaus.janino.UnitCompiler.(UnitCompiler.java:164) at org.apache.drill.exec.compile.JaninoClassCompiler.getClassByteCode(JaninoClassCompiler.java:53) at org.apache.drill.exec.compile.QueryClassLoader.getClassByteCode( QueryClassLoader.java:69) org.apache.drill.exec.compile.ClassTransformer.getImplementationClass(ClassTransformer.java:256) org.apache.drill.exec.ops.FragmentContext.getImplementationClass(FragmentContext.java:185) org org.apache.drill.exec.record の .apache.drill.exec.physical.impl.project.ProjectRecordBatch.setupNewSchema(ProjectRecordBatch.java:240)。AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java:57) at org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.next(ProjectRecordBatch.java:83) at org.apache.drill.exec.record.AbstractSingleRecordBatch.next( AbstractSingleRecordBatch.java:45) の org.apache.drill.exec.physical.impl.limit.LimitRecordBatch.next(LimitRecordBatch.java:99) の org.apache.drill.exec.record.AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java: 45) org.apache.drill.exec.physical.impl.svremover.RemovingRecordBatch.next(RemovingRecordBatch.java:94) で org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.next(ScreenCreator.java: 80) org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:104) で java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) で java.lang.Thread.run(Thread.java:744) で

ご覧のとおり、例外のタイプは ですSchemaChangeExceptionが、内部例外はClassNotFoundExceptionfor ですSchemaChangeException

行 4、列 8: インポートされたクラス "org.apache.drill.exec.exception.SchemaChangeException" を読み込めませんでした

そのため、アプリケーションが Apache Twill で実行されると変更されるクラス ローダーに何か問題があります。スタンドアロンで動作しますが、どちらの場合も、基礎となる jar は同一です。

Apache Twill には追加のリソースを追加する機能もありますが、そこに jar を追加しても機能しませんでした。代わりに、jar が既に含まれているという例外が発生しました。

スレッド「ServiceDelegate STARTING」の例外 java.lang.RuntimeException: java.util.zip.ZipException: 重複したエントリ: lib/drill-java-exec-1.0.0-m2-incubating-SNAPSHOT-rebuffed.jar

com.google.common.base.Throwables.propagate(Throwables.java:160) で org.apache.twill.yarn.YarnTwillController.doStartUp(YarnTwillController.java:133) で org.apache.twill.internal.AbstractZKServiceController.startUp (AbstractZKServiceController.java:82) org.apache.twill.internal.AbstractExecutionServiceController$ServiceDelegate.startUp(AbstractExecutionServiceController.java:109) で com.google.common.util.concurrent.AbstractIdleService$1$1.run(AbstractIdleService.java:43) ) at java.lang.Thread.run(Thread.java:744) 原因: java.util.zip.ZipException: 重複したエントリ: lib/drill-java-exec-1.0.0-m2-incubating-SNAPSHOT-rebuffed. jar の java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:215) の java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:109) の org.apache.twill.internal.ApplicationBundler.copyResource(ApplicationBundler.java:347) org.apache.twill.internal.ApplicationBundler.createBundle(ApplicationBundler.java:140) org.apache.twill.yarn.YarnTwillPreparer.createContainerJar(YarnTwillPreparer.java:388) org .apache.twill.yarn.YarnTwillPreparer.access$300(YarnTwillPreparer.java:106) at org.apache.twill.yarn.YarnTwillPreparer$1.call(YarnTwillPreparer.java:264) at org.apache.twill.yarn.YarnTwillPreparer$1. call(YarnTwillPreparer.java:253) at org.apache.twill.yarn.YarnTwillController.doStartUp(YarnTwillController.java:98) ... 4 もっと見るyarn.YarnTwillPreparer.access$300(YarnTwillPreparer.java:106) at org.apache.twill.yarn.YarnTwillPreparer$1.call(YarnTwillPreparer.java:264) at org.apache.twill.yarn.YarnTwillPreparer$1.call(YarnTwillPreparer.java) :253) at org.apache.twill.yarn.YarnTwillController.doStartUp(YarnTwillController.java:98) ... 4 つ以上yarn.YarnTwillPreparer.access$300(YarnTwillPreparer.java:106) at org.apache.twill.yarn.YarnTwillPreparer$1.call(YarnTwillPreparer.java:264) at org.apache.twill.yarn.YarnTwillPreparer$1.call(YarnTwillPreparer.java) :253) at org.apache.twill.yarn.YarnTwillController.doStartUp(YarnTwillController.java:98) ... 4 つ以上

使用される基礎となるクラスローダーはURLClassLoader. 空の配列で初期化されていますが、スタンドアロン アプリケーションでは機能します。問題は、Apache Twill で実行する場合のみです。ルックアップする URL をどこから取得するのでしょうか。どうすれば確認できますか?

クラスローダーの定義:

エラーが発生する理由や解決方法を調べることができるアイデアはありますか?

0 投票する
1 に答える
468 参照

java - AndroidでJaninoを使用すると、このエラーがポップアップしました...修正方法はありますか?

問題を引き起こすコードは次のとおりです。このコードでは、janino を使用してコンパイラを作成しています。エラーは主に、投稿 Java.lang.ClassnotFound の下部にある String ステートメントに関連していると想定しています

0 投票する
1 に答える
4792 参照

logback - logback 構成の条件

janino の条件付き処理を使用して、冗長な logback 構成ファイルを削除しようとしています。

以下は、私が追加した条件付きロジックです

しかし、これは以下のエラーをスローします

条件付きロジックを削除して次のようなものを使用すると、構成は正常に機能します

CONSOLE アペンダーが Windows でのみ使用され、EMAIL アペンダーが他の場所で使用されるように、これを正しく構成するにはどうすればよいですか?