【问题标题】:Exception loading CustomMeta from Tridion Broker Service (2009 SP1)从 Tridion Broker Service (2009 SP1) 加载 CustomMeta 时出现异常
【发布时间】:2012-04-24 17:46:42
【问题描述】:

我正在尝试从发布到 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 正在启动。

【问题讨论】:

  • 这通常是由于您的机器上没有正确的 JVM 造成的。确保您同时安装了 32 位和 64 位 JVM(我不记得为什么,但我很确定有人会在几分钟内告诉我们)。
  • 您安装了 32 位还是 64 位 java?您是否在使用匹配的 Tridion Content Delivery DLL?
  • 32 位服务器和 32 位 java。我在安装程序中使用 x86 DLL。
  • java version "1.6.0_27" Java(TM) SE Runtime Environment (build 1.6.0_27-b07) Java HotSpot(TM) Client VM(build 20.2-b06,混合模式,共享)跨度>

标签: tridion


【解决方案1】:

您使用的是 Java 1.6 吗?我想你可能使用的是 Java 1.5 的 JDBC 驱动程序,如果是这样,请从 here 下载最新的驱动程序

还要仔细检查代理配置中的所有绑定!

【讨论】:

  • 不确定是哪一个,但我已经从另一个项目复制了绑定并更新了 JDBC 驱动程序 JAR 文件,现在一切正常。
  • Tridion 未附带 JDBC 驱动程序
  • Nuno 说得好。我认为我们在安装文件夹中的那个是错误的,或者我的绑定毕竟是问题 - 更新了克里斯的回答以反映这一点。
  • 丢失的 JAR(ClassNotFoundError 异常)应该被记录在日志中。你看到了吗?
【解决方案2】:

通常当我遇到这种错误时,是因为以下原因之一:

  • Java 运行时未安装或可用于 Web 应用程序(从以前的 cmets 中,我发现您不是这种情况)。您是否检查过事件查看器(Tridion 或 Tridion Content Manager)是否有错误?类似“无法找到 JVM”...

  • 缺少 JAR - 您的类路径中缺少 Tridion 或第 3 方 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)并检查运行它的用户(推荐网络服务)。

【讨论】:

  • 感谢您的回答。在哪里配置 cd_core 日志?
  • 在一个名为 logback.xml 的文件中,该文件通常位于您的 bin/config 文件夹中。
  • cd_core.log 仅适用于 Tridion 2011 - 您在 2009 年没有此功能,请检查各个 cd_*_conf.xml 文件的日志位置和日志级别。
  • 非常好。我的印象是您正在从 2009 年升级到 2011 年...
猜你喜欢
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2012-06-24
  • 2012-04-30
  • 1970-01-01
相关资源
最近更新 更多