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

更新 我查看了在“信息”级别启用日志的代理日志,但在“启用 Tridion 代理”后什么也没看到。这是配置问题还是 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”之类的东西...

  • 缺少 JAR - 您的类路径中缺少 Tridion 或 3rd 方 JAR(可能在您的webroot/bin/lib.

  • 配置错误(Tridion 配置错误,在某处webroot/bin/config);

  • 缺少许可证文件(检查webroot/bin/config/cd_licenses.xml或者您的配置文件可能指向另一个cd_licenses.xml,Web 应用程序应用程序池用户可能无法使用或访问)。丢失的许可证可能是最棘手的。您在日志中看到的只是一个微妙的提及,指出由于许可证丢失/过期,代理已恢复为“文件系统”。这意味着不会与 CD DB 进行通信——对于自定义元,这是不行的;

最后 3 个错误将在日志文件中出现。因此,请确保您启用了日志级别调试并在 cd_core 和 cd_broker 日志中查找任何堆栈跟踪。

最后但同样重要的是,确保您的网站应用程序池对于 Tridion 网站是唯一的(不要在其他网站中重复使用)。检查使用的 .net 版本(推荐 4.0)并检查运行它的用户(推荐网络服务)。

于 2012-04-12T15:23:31.297 回答