Hybris中如何解决AttributeNotSupportedException
How to solve AttributeNotSupportedException in Hybris
每次我们向 items.xml 添加新属性时,我们都必须执行 hybris 更新,否则我们会得到一些错误,例如:JaloItemNotFoundException: no attribute Cart.newAttribute
但是,有时在执行更新后,我们不会得到 JaloItemNotFoundException,而是得到如下内容:
de.hybris.platform.servicelayer.exceptions.AttributeNotSupportedException: cannot find attribute newAttribute
对于第二种情况,如果我们在更新后重新启动服务器,它总是有效的。
更新后除了重启服务器还有什么办法可以解决吗?
我几年前在一家公司工作,该公司在更新后将此重新启动添加为 "deploy step"。我试图在这里避免这种情况。
我尝试执行多个更新并清理类型缓存。但没有运气。
使用 "Update Running System" 进行平台更新通常就足够了。如果您有本地化、impex 或其他一些更改,您可能需要包括其他选项或扩展。
如果您有集群环境,请确保所有节点都已更新/刷新。
确保您的构建和部署过程类似于:
- 建造
- 部署
- 重启服务器。 您 stop/start 手动(或通过脚本),或者让 Hybris 在检测到部署更改时自行重启。
- 运行 平台更新
您可以尝试在启动服务器之前从命令行(即"ant updatesystem")构建后直接更新平台。
部署后重启是一个很常见的步骤(如果更新系统是在服务器启动的情况下执行的)。
我认为需要重新启动的原因之一是 Spring 上下文需要重新初始化,因为一些 bean 需要新的类型系统信息。
例如,假设您需要创建一个新类型并为该新创建的类型创建一个拦截器。部署此更改时,您执行以下操作:
- 更改二进制文件并启动服务器
- 执行更新系统以使数据库获得最新的列等
现在,如果您尝试查看拦截器是否工作,您会发现它不起作用,因为当它的 spring bean 被实例化时(在服务器启动期间)它应该处理的类型不是存在于数据库中。
因此,在重新启动后,拦截器会按预期工作。
PS:上述拦截器问题可能已在最新的 Hybris 版本中以某种方式得到修复。
每次我们向 items.xml 添加新属性时,我们都必须执行 hybris 更新,否则我们会得到一些错误,例如:JaloItemNotFoundException: no attribute Cart.newAttribute
但是,有时在执行更新后,我们不会得到 JaloItemNotFoundException,而是得到如下内容:
de.hybris.platform.servicelayer.exceptions.AttributeNotSupportedException: cannot find attribute newAttribute
对于第二种情况,如果我们在更新后重新启动服务器,它总是有效的。 更新后除了重启服务器还有什么办法可以解决吗?
我几年前在一家公司工作,该公司在更新后将此重新启动添加为 "deploy step"。我试图在这里避免这种情况。
我尝试执行多个更新并清理类型缓存。但没有运气。
使用 "Update Running System" 进行平台更新通常就足够了。如果您有本地化、impex 或其他一些更改,您可能需要包括其他选项或扩展。
如果您有集群环境,请确保所有节点都已更新/刷新。
确保您的构建和部署过程类似于:
- 建造
- 部署
- 重启服务器。 您 stop/start 手动(或通过脚本),或者让 Hybris 在检测到部署更改时自行重启。
- 运行 平台更新
您可以尝试在启动服务器之前从命令行(即"ant updatesystem")构建后直接更新平台。
部署后重启是一个很常见的步骤(如果更新系统是在服务器启动的情况下执行的)。
我认为需要重新启动的原因之一是 Spring 上下文需要重新初始化,因为一些 bean 需要新的类型系统信息。
例如,假设您需要创建一个新类型并为该新创建的类型创建一个拦截器。部署此更改时,您执行以下操作:
- 更改二进制文件并启动服务器
- 执行更新系统以使数据库获得最新的列等
现在,如果您尝试查看拦截器是否工作,您会发现它不起作用,因为当它的 spring bean 被实例化时(在服务器启动期间)它应该处理的类型不是存在于数据库中。
因此,在重新启动后,拦截器会按预期工作。
PS:上述拦截器问题可能已在最新的 Hybris 版本中以某种方式得到修复。