来自OSGI的可配置Java Servlet

时间:2013-03-29 21:19:35

标签: java sling osgi-bundle

我正在尝试创建一个可通过OSGi控制台配置的Java类。我听说你可以通过SCR注释做到这一点但不完全确定如何做到这一点。我已经掌握了大部分内容,但不确定要获取和发布的内容以及如何在JSP中引用它。以下是我到目前为止的情况:

import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;

import javax.servlet.ServletException;
import java.io.IOException;

@SlingServlet(
paths={"/somepath/"}
)
@Properties({
@Property(name="email.add", value="Email Info",propertyPrivate=false),
@Property(name="user.info",value="User Info", propertyPrivate=false)
})
public class WelcomeMessage extends SlingAllMethodsServlet
{
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse                                 response) throws ServletException, IOException
{
    //Do something here
}

@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException
{
    //Do something here
}
}

1 个答案:

答案 0 :(得分:3)

为了能够处理这样的注释,您需要设置Maven SCR插件(来自Apache Felix)。此插件将处理注释并在生成的JAR文件中创建元数据。

@SlingServlet注释是Apache Sling特有的,需要某些Apache Sling包才能注册servlet。 @SlingServlet注释也由Maven SCR插件处理。

以下是有关如何在Maven中配置SCR插件的示例。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.felix</groupId>
      <artifactId>maven-scr-plugin</artifactId>
      <version>1.9.0</version>
      <executions>
        <execution>
          <id>generate-scr-scrdescriptor</id>
          <goals>
            <goal>scr</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

另外,为了能够创建OSGi包(带有OSGi元数据的Jar),您需要设置Maven Bundle插件。

您可以在此处找到有关Maven SCR插件的简要文档:http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin.html

Maven Bundle插件文档位于:http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

但是,了解这一点的最佳方法是查看Sling包中的示例:https://github.com/apache/sling/tree/trunk/bundles