从Tridion Broker Service(2009 SP1)加载CustomMeta的异常

时间:2012-04-12 11:25:09

标签: tridion

我正在尝试从发布到Tridion Broker的组件中加载一些Custom Meta。

这是2009 SP1

我可以在Custom_Meta表中看到包含如下查询的组件:

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

但是使用下面的代码,我在GetMeta的行上得到一个Java Runtime异常。我注意到如果我的queryStringId是一个正确的TCM ID,那么它将抛出excpetion但是如果我只是把项目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

更新 我查看了Broker日志,并在“info”级别启用了日志,并在“Tridion Broker启用”后看不到任何内容。这是配置还是DLL问题?看起来CD根本没有调用服务?

更新2 我尝试过很多东西但仍然没有帮助。这就像代码无法与JVM通信,但我可以看到JVM在事件日志中启动。

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:4)

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

  • Java运行时没有安装或可用于web-app(从以前的评论中我看到的情况并非如此)。您是否检查过事件查看器(Tridion或Tridion Content Manager)是否有错误?像'无法找到JVM'......

  • 缺少JAR - 您的类路径中缺少Tridion或第三方JAR(可能在您的webroot/bin/lib下);

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

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

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

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