Сначала просто ответьте на комментарий в ответе accept.
«Что делает привязка? Что делать, если у меня есть интерфейс и реализация?»
blockquote>Он просто читает
bind( implementation ).to( contract )
. Вы можете использовать альтернативную цепочку.in( scope )
. Область по умолчаниюPerLookup
. Поэтому, если вам нужен синглтон, вы можетеbind( implementation ).to( contract ).in( Singleton.class );
Также имеется
RequestScoped
Кроме того, вместо
bind(Class).to(Class)
вы также можетеbind(Instance).to(Class)
, который будет быть автоматически одиночным.
Для тех, кто пытается выяснить, как зарегистрировать реализацию
AbstractBinder
в ваш web.xml (т. е. вы не используетеResourceConfig
), похоже, связывание не будет обнаружено через сканирование пакетов, то есть
org.glassfish.jersey.servlet.ServletContainer jersey.config.server.provider.packages your.packages.to.scan Или это либо
jersey.config.server.provider.classnames com.foo.YourBinderImpl Чтобы заставить его работать, мне пришлось реализовать
Feature
:import javax.ws.rs.core.Feature; import javax.ws.rs.core.FeatureContext; import javax.ws.rs.ext.Provider; @Provider public class Hk2Feature implements Feature { @Override public boolean configure(FeatureContext context) { context.register(new AppBinder()); return true; } }
Аннотации
@Provider
должны позволять выбиратьFeature
путем сканирования пакета. Или без сканирования пакетов вы можете явно зарегистрироватьFeature
вweb.xml
Jersey Web Application org.glassfish.jersey.servlet.ServletContainer ... jersey.config.server.provider.classnames com.foo.Hk2Feature 1 См. Также:
- Пользовательский параметр метода [gg]
- Как правильно настроить EntityManager в jersey / hk2
- Запросить выделенную инъекцию в синглтоны
и для общей информации из документации Джерси
UPDATE
Заводы
от базовой привязки в принятом ответе, у вас также есть заводы, где вы можете иметь более сложную логику создания, а также иметь доступ к информации контекста запроса. Например
public class MyServiceFactory implements Factory
{ @Context private HttpHeaders headers; @Override public MyService provide() { return new MyService(headers.getHeaderString("X-Header")); } @Override public void dispose(MyService service) { /* noop */ } } register(new AbstractBinder() { @Override public void configure() { bindFactory(MyServiceFactory.class).to(MyService.class) .in(RequestScoped.class); } }); Затем вы можете ввести
MyService
в свой класс ресурсов.
Вы отправили проблему о средстве отслеживания ошибки Xinc? Сам Xinc должен хорошо работать, когда он работает и как демон и как веб-приложение. Когда Вы сослались на, проблема может быть то, что демон не работает в chroot'ed среде, где, поскольку веб-интерфейс, ведя любой стороне, не захватывая файлы.
@dragonmantank
В случае Xinc я надеюсь, что Вы использовали ГРУШУ для установки его.
pear list-files xinc/Xinc
Это должно сделать это и показать Вам, куда Ваша установка Xinc поместила свои файлы. Таким образом даже при том, что Xinc является "всего" один большой Сценарий PHP, он все еще распространен в емкостно-резистивные сценарии и все те другие вещи, которые необходимы сделать выполнение приложения. Я уверен, что Вы не должны добавлять все пути, перечисленные там, но вероятно некоторые, чтобы заставить его работать.
Кроме самого Xinc, я думаю, что ему также нужен phpUnit, и набор другой ГРУШИ освобождает для выполнения, поэтому что я предложил бы, это:
pear config-get php_dir
И затем необходимо добавить что путь (как предложенный Henrik) к chroot среде.
Никогда используя xinc самостоятельно, я могу только подсказать относительно того, как я обычно добираюсь до chrooting приложений.
Первый шаг должен был бы собрать информацию обо всем, что приложение должно выполнить; это, которое я обычно выполняю путем выполнения systrace (1) и ldd (1) для обнаружения, что необходимо для выполнения программного обеспечения.
Пройдите вывод
systrace -A -d. <app>
ldd <app>
и удостоверьтесь, что все касания приложения и потребности (довольно много приложений касается материала, в котором это на самом деле не нуждается), доступно в chroot среде. Вы, возможно, должны были бы настроить конфигурации и переменные среды немного. Кроме того, если существует опция иметь журнал приложения к системному журналу, я обычно делаю это и создаю сокет системного журнала (см.-a опцию syslogd (8)) для уменьшения мест, к которым приложение нужно в доступе для записи.
То, что я просто описал, является универсальным способом сделать примерно любой прогон программы в chroot среде (однако, если необходимо импортировать половину пространства пользователя и некоторых команд suid, Вы могли бы хотеть просто не, делают chroot :). Для приложений, работающих под Apache (я уверен, что Вы знаете, что OpenBSD httpd (8) немного отличается), у Вас есть опция (после того как программа запустилась; любые динамические библиотеки все еще должны присутствовать в тюрьме) использования апача для доступа к файлам, позволяя использованию httpd.conf импортировать ресурсы в chroot среде, на самом деле не копируя их.
Также полезный (если немного устаревший) эта ссылка, обрисовывая в общих чертах некоторые глюки в chrooted PHP на OpenBSD.
Первый шаг должен был бы собрать информацию обо всем, что приложение должно выполнить; это, которое я обычно выполняю путем выполнения systrace (1) и ldd (1) для обнаружения, что необходимо для выполнения программного обеспечения.
Я дам этому попытку. Большая проблема, которую я нашел с xinc, - то, что, в то время как это - приложение PHP, он хочет знать пути установки приложения (все же, это все еще распространяет материал в другие папки), и выполняет некоторые Сценарии PHP в режиме демона (те сценарии, являющиеся самым твердым для получения выполнения). Так, например, я сказал этому устанавливать на/var/www/xinc и затем сделал символьную ссылку
/var/www/var/www/xinc->/var/www/xinc
и это частично работало. Я заставил GUI подходить бит, он отказался распознавать любые проекты, которые я настроил. Я думаю, что самая большая проблема состоит в том, что часть его выполняет chroot, и другая половина работает снаружи.
Если все остальное перестало работать, я собираюсь просто должным быть создать что-то, поскольку мы программируем внутри chrooted среды, так как наше производство является chrooted. Мы столкнулись с проблемами, где мы кодируем за пределами chroot и затем имеем для поддержки дорожки для нахождения то, что мы должны заставить ее работать в chroot.