上記のすべての答えは正しいです。シェルに何かを印刷するようなものを作成するには、次のように記述できます。
public interface PrintService {
public void print();
}
実装:
public class PrintServiceImpl implements PrintService {
@Override
public void print() {
System.out.println("Hello from PrintServiceImpl!");
}
}
コンポーネント.xml:
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="service">
<implementation class="service.PrintServiceImpl"/>
<service>
<provide interface="print.PrintService"/>
</service>
</scr:component>
これで、Command を使用して印刷メソッドを呼び出すことができます。
public class PrintCommand implements Command {
private PrintService printer;
public void setPrinter(PrintService printer) {
this.printer = printer;
}
public void unsetPrinter(PrintService printer) {
this.printer = null;
}
@Override
public void execute(String line, PrintStream arg1, PrintStream arg2) {
printer.print();
}
@Override
public String getName() {
return "print";
}
@Override
public String getShortDescription() {
return "just a printer";
}
@Override
public String getUsage() {
return "print";
}
}
また、component.xml には新しいエントリが必要です。
<component name="PrintCommand">
<implementation class="PrintCommand"/>
<service>
<provide interface="org.apache.felix.shell.Command"/>
</service>
<reference
name="printer"
interface="PrintService"
bind="setPrinter"
unbind="unsetPrinter"
cardinality="1..1"
policy="static"
/>
</component>
Command Interface は Apache Felix Shell の一部です。Felix を実行help
してコンソールに入力すると、登録されているすべてのコマンドが表示され、PrintCommand もありますprint
。シェルで print と入力すると、テキストが表示されます。