legacy-knowledge-base
公開されました Sep. 10, 2025

スケジュールされたパブリケーションが LXC 環境で機能しない

written-by

Madeleine Clay

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

  • データベース パーティション環境でスケジュールされたパブリケーションが失敗します。
  • パブリケーションがスケジュールされている場合、パブリケーションの代わりにパブリケーション ページが使用できなくなり、UI に「パブリケーションは一時的に利用できません」というメッセージが表示 れます。
  • さらに、ログに IllegalArgumentException がスローされます。
2022-12-20 17:54:18.058 ERROR [http-nio-8080-exec-9][PortletRequestDispatcherImpl:304] Unable to dispatch request: java.lang.IllegalArgumentException: Unknown class: <null>
2022-12-20 17:54:18.061 ERROR [http-nio-8080-exec-9][PortletServlet:117] null
javax.portlet.PortletException: org.apache.jasper.JasperException: java.lang.IllegalArgumentException: Unknown class: <null>
at com.liferay.portlet.internal.PortletRequestDispatcherImpl.dispatch(PortletRequestDispatcherImpl.java:307) ~[portal-impl.jar:?]
at com.liferay.portlet.internal.PortletRequestDispatcherImpl.include(PortletRequestDispatcherImpl.java:123) ~[portal-impl.jar:?]
at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.include(MVCPortlet.java:620) ~[portal-kernel.jar:?]
at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.include(MVCPortlet.java:636) ~[portal-kernel.jar:?]
at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.doDispatch(MVCPortlet.java:506) ~[portal-kernel.jar:?]
[...]
Caused by: org.apache.jasper.JasperException: java.lang.IllegalArgumentException: Unknown class: <null>
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:440) ~[jasper.jar:9.0.65]
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473) ~[jasper.jar:9.0.65]
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377) ~[jasper.jar:9.0.65]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR]
at com.liferay.portal.osgi.web.servlet.jsp.compiler.internal.JspServlet.service(JspServlet.java:328) ~[?:?]
at com.liferay.portal.osgi.web.servlet.jsp.compiler.internal.JspServlet.service(JspServlet.java:340) ~[?:?]
at org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.service(EndpointRegistration.java:153) ~[?:?]
at org.eclipse.equinox.http.servlet.internal.servlet.ResponseStateHandler.processRequest(ResponseStateHandler.java:62) ~[?:?]
at org.eclipse.equinox.http.servlet.internal.context.DispatchTargets.doDispatch(DispatchTargets.java:120) ~[?:?]
at org.eclipse.equinox.http.servlet.internal.servlet.RequestDispatcherAdaptor.include(RequestDispatcherAdaptor.java:48) ~[?:?]
at com.liferay.portlet.internal.PortletRequestDispatcherImpl.dispatch(PortletRequestDispatcherImpl.java:291) ~[portal-impl.jar:?]
... 243 more
Caused by: java.lang.IllegalArgumentException: Unknown class: <null>
at org.apache.commons.lang.time.FastDateFormat.format(FastDateFormat.java:796) ~[commons-lang.jar:2.6]
at java.text.Format.format(Format.java:157) ~[?:1.8.0_291]
at org.apache.jsp.publications.view_005fscheduled_jsp._jspService(view_005fscheduled_jsp.java:486) ~[?:?]
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111) ~[jasper.jar:9.0.65]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR]
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411) ~[jasper.jar:9.0.65]
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473) ~[jasper.jar:9.0.65]
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377) ~[jasper.jar:9.0.65]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR]
at com.liferay.portal.osgi.web.servlet.jsp.compiler.internal.JspServlet.service(JspServlet.java:328) ~[?:?]
at com.liferay.portal.osgi.web.servlet.jsp.compiler.internal.JspServlet.service(JspServlet.java:340) ~[?:?]
at org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.service(EndpointRegistration.java:153) ~[?:?]
at org.eclipse.equinox.http.servlet.internal.servlet.ResponseStateHandler.processRequest(ResponseStateHandler.java:62) ~[?:?]
at org.eclipse.equinox.http.servlet.internal.context.DispatchTargets.doDispatch(DispatchTargets.java:120) ~[?:?]
at org.eclipse.equinox.http.servlet.internal.servlet.RequestDispatcherAdaptor.include(RequestDispatcherAdaptor.java:48) ~[?:?]
at com.liferay.portlet.internal.PortletRequestDispatcherImpl.dispatch(PortletRequestDispatcherImpl.java:291) ~[portal-impl.jar:?]
... 243 more

Environment

  • LXC、DXP 7.4

解決策

  • これは、U60 でリリースされた LPS-172099によって解決されました。
  • 修正を適用した後、次の groovy スクリプトを実行して、すべての古いスケジュール済みパブリケーションのステータスを進行中に戻す必要 あります。
    • 最初にこのスクリプトを実行して、すべての会社とその ID を出力します
import com.liferay.portal.kernel.model.Company;
import com.liferay.portal.kernel.service.CompanyLocalServiceUtil;import java.util.List;List<Company> companies = CompanyLocalServiceUtil.getCompanies();for (Company company : companies) {
    out.println(company.getName() + ": " + company.getCompanyId());
} 
    • 次に、を受けるサイトの仮想インスタンスの ID と一致するように、次のスクリプトの companyId の値を 調整します。
import com.liferay.change.tracking.model.CTCollection;
import com.liferay.change.tracking.service.CTCollectionLocalServiceUtil;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.scheduler.*;
import com.liferay.portal.kernel.scheduler.messaging.SchedulerResponse;
import com.liferay.portal.kernel.security.auth.CompanyThreadLocal;
import com.liferay.portal.kernel.util.OrderByComparatorFactoryUtil;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.workflow.WorkflowConstants;

import java.util.List;

final long companyId = 40774;

long oldCompanyId = CompanyThreadLocal.getCompanyId();

try {
	CompanyThreadLocal.setCompanyId(companyId);
	
	OrderByComparator<CTCollection> orderByComparator =
			OrderByComparatorFactoryUtil.create(
				"CTCollection", "modifiedDate", true);

	List<CTCollection> ctCollections = CTCollectionLocalServiceUtil.getCTCollections(
		companyId, WorkflowConstants.STATUS_SCHEDULED, 
		QueryUtil.ALL_POS, QueryUtil.ALL_POS, orderByComparator);

	for ( CTCollection ctCollection : ctCollections) {

	SchedulerResponse schedulerResponse = SchedulerEngineHelperUtil.getScheduledJob(String.valueOf(
            ctCollection.getCtCollectionId()), 
            "liferay/ct_collection_scheduled_publish", 
            StorageType.PERSISTED);

		if (schedulerResponse == null) {
			ctCollection.setStatus(WorkflowConstants.STATUS_DRAFT);

			CTCollectionLocalServiceUtil.updateCTCollection(ctCollection);

			out.println(
				"Successfully updated status of CT collection " +
					ctCollection.getCtCollectionId());
		}
	}
}
finally {
	CompanyThreadLocal.setCompanyId(oldCompanyId);
}

did-this-article-resolve-your-issue

legacy-knowledge-base