Gle*_*iko 12 adobe osgi sling day-cq aem
如何以编程方式知道实例正在运行的运行模式?我创建了一个自定义标记,根据实例运行模式提供配置,但我无法确定当前的运行模式.
我找到了一个返回run-mods实例列表的方法:
SlingSettings settings = ...get from BundleContext...
Set<String> currentRunModes = settings.getRunModes();
Run Code Online (Sandbox Code Playgroud)
但我无法获取SlingSettings或BundleContext对象.如何获取这些对象,或者可能有另一种方法来获取当前的运行模式?
Ber*_*taz 15
SlingSetttings是正确的方法 - 如果它来自Java,最简单的方法就是在一个SCR @Component的类中使用SCR @Reference注释,这样就不必经过BundleContext.
如果它来自Sling脚本,您可以使用sling.getService(....)来获取SlingSettings.
请注意,您需要阅读运行模式的情况很少见,通常您宁愿设置OSGi配置以依赖于运行模式,并让OSGi组件根据它修改其行为.
Gle*_*iko 10
最后我决定使用global.jsp,在页面上下文中编写运行模式并在我的类中获取它:
<%
pageContext.setAttribute("runModes", sling.getService(SlingSettingsService.class).getRunModes().toString());
%>
Run Code Online (Sandbox Code Playgroud)
小智 6
import java.util.Set;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
import org.apache.sling.settings.SlingSettingsService;
public class myClass {
public static Set<String> getRunModes() {
BundleContext bundleContext = FrameworkUtil.getBundle(myClass.class).getBundleContext();
ServiceReference serviceReference = bundleContext.getServiceReference(SlingSettingsService.class.getName( ));
SlingSettingsService slingSettingsService = (SlingSettingsService)bundleContext.getService(serviceReference);
return slingSettingsService.getRunModes();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19915 次 |
| 最近记录: |