3

Tridion Broker に公開されているコンポーネントからカスタム メタを読み込もうとしています。

これは 2009 SP1 です

次のようなクエリを使用して、Custom_Meta テーブル内のコンポーネントを確認できます。

SELECT * FROM [Tridion_Broker].[dbo].[CUSTOM_META] WHERE ITEM_ID = 204221

ただし、以下のコードを使用すると、GetMeta を実行する行で Java ランタイム例外が発生します。queryStringId が適切な TCM ID の場合、例外がスローされますが、アイテム ID を入力しただけでは null が返されることに気付きました。

string queryStringId = HttpUtility.UrlDecode(Request.QueryString["component_uri"]);

string pageId = ((BasePage) Page).PageTcmId;
int publicationId = int.Parse(pageId.Split(':')[1].Split('-')[0]);
using (var cmf = new ComponentMetaFactory(publicationId))
{
    IComponentMeta cm = cmf.GetMeta(queryStringId);
    if(cm != null)
    {
        VideoId = cm.CustomMeta.GetValue("video_url").ToString();
    }
    else
    {
        litMessage.Visible = true;
    }
}

スタックトレース:

[RuntimeException]
   Codemesh.JuggerNET.NTypeValue.Throw(Int64 inst) +351
   Codemesh.JuggerNET.JavaClass.ThrowTypedException(Int64 inst) +1278
   Codemesh.JuggerNET.JavaMethod.CallObject(JavaProxy jpo, JavaMethodArguments args) +551
   Codemesh.JuggerNET.JavaMethod.CallObject(JavaProxy jpo, Type declaredType, Boolean bLeaf, JavaMethodArguments jargs) +50
   Com.Tridion.Meta.ComponentMetaFactory.GetMeta(Int32 componentId) +118
   Tridion.ContentDelivery.Meta.ComponentMetaFactory.GetMeta(Int32 componentId) +16
   ASP._controls_video_ascx.Page_Load(Object sender, EventArgs args) in c:\Inetpub\wwwroot\borland\us\_controls\Video.ascx:18
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +50
   System.Web.UI.Control.LoadRecursive() +141
   System.Web.UI.Control.LoadRecursive() +141
   System.Web.UI.Control.LoadRecursive() +141
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

更新 "info" レベルでログを有効にして Broker ログを調べましたが、"Tridion Broker is enabled" の後に何も表示されません。これは構成または DLL の問題ですか? CD がサービスをまったく呼び出していないように見えますか?

更新 2 私は多くのことを試しましたが、まだ助けにはなりません。コードが JVM と通信できないようですが、イベント ログで JVM が開始されていることを確認できます。

4

2 に答える 2

9

Java 1.6 を使用していますか? Java 1.5 用の JDBC ドライバーを使用している可能性があると思います。その場合は、こちらから最新のドライバーをダウンロードしてください。

また、ブローカー構成ですべてのバインディングを再確認してください!

于 2012-04-12T17:08:49.830 に答える
4

通常、この種のエラーが発生したときは、次のいずれかが原因でした。

  • Javaランタイムがインストールされていないか、Webアプリで利用できませんでした(以前のコメントから、これはあなたには当てはまらないことがわかります)。イベント ビューアー (Tridion または Tridion Content Manager) でエラーを確認しましたか? 「JVMが見つかりません」のようなもの...

  • Missing JAR - クラスパスに Tridion またはサードパーティの JAR がありません (これは の下にある可能性がありますwebroot/bin/lib);

  • 構成エラー (Tridion の構成が間違っています。どこかwebroot/bin/config);

  • ライセンス ファイルがありません (webroot/bin/config/cd_licenses.xmlまたは構成ファイルが別cd_licenses.xmlの を指していることを確認してください。これは、Web アプリの app-pool ユーザーが使用できないか、アクセスできない可能性があります)。ライセンスの紛失は、おそらく最も厄介です。ログに表示されるのは、ライセンスが見つからないか期限切れになったため、ブローカーが「ファイル システム」に戻ったことを示す微妙な言及だけです。これは、CD DB との通信が行われないことを意味します。カスタム メタの場合、これはできません。

最後の 3 つのエラーは、ログ ファイルにいくらか存在します。そのため、ログ レベルのデバッグが有効になっていることを確認し、cd_core および cd_broker ログでスタック トレースを探します。

最後になりましたが、Web サイトの app-pool が Tridion Web サイトに固有のものであることを確認してください (他の Web サイトで再利用しないでください)。使用されている .net のバージョンを確認し (4.0 を推奨)、それを実行しているユーザーを確認します (ネットワーク サービスを推奨)。

于 2012-04-12T15:23:31.297 に答える