У меня есть приложение для CDI + OSGI javase. CDI-Weld, OSGI-felix и pax-cdi. И у меня есть следующий код в «CDI-магистральный»OSGI + CDI: странное поведение с обнаружением системных принтеров
@ApplicationScoped
public class Foo{
public void postCreate(@Observes ContainerInitialized event, BundleContext ctx) throws Exception {
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
System.out.println("$Number of print services: " + printServices.length);
for (PrintService printer : printServices)
System.out.println("$Printer: " + printer.getName());
}
}
Когда я запускаю это приложение, я получаю следующий результат (хотя у меня есть принтеры с правильными драйверами!)
$ Номер печати услуги: 0
Уведомление, первый признак: $; Если добавить следующий код для объединения активатора и начать его
public class Activator implements BundleActivator {
public void start(BundleContext context) throws Exception {
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
System.out.println("#Number of print services: " + printServices.length);
for (PrintService printer : printServices)
System.out.println("#Printer: " + printer.getName());
}
public void stop(BundleContext context) throws Exception {
}
}
Обратите внимание, первый знак детектируются # .Затем все мои принтеры:
#Number of print services: 1
#Printer: MF3110
Jun 14, 2015 1:47:34 PM org.jboss.weld.bootstrap.WeldStartup startContainer...
....
$Number of print services: 1
$Printer: MF3110
Как это объяснить?
Возможно, это связано с произвольным началом заказа. Символ # vs $, очевидно, не связан, это просто случайно. –