我正在尝试从发布到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在事件日志中启动。
答案 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)并检查运行它的用户(推荐网络服务)。