Выполнение xinc на Сервере Apache OpenBSD

Сначала просто ответьте на комментарий в ответе 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


См. Также:

и для общей информации из документации Джерси


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 в свой класс ресурсов.

10
задан dragonmantank 13 August 2008 в 03:47
поделиться

4 ответа

Вы отправили проблему о средстве отслеживания ошибки Xinc? Сам Xinc должен хорошо работать, когда он работает и как демон и как веб-приложение. Когда Вы сослались на, проблема может быть то, что демон не работает в chroot'ed среде, где, поскольку веб-интерфейс, ведя любой стороне, не захватывая файлы.

3
ответ дан 4 December 2019 в 02:52
поделиться

@dragonmantank

В случае Xinc я надеюсь, что Вы использовали ГРУШУ для установки его.

pear list-files xinc/Xinc

Это должно сделать это и показать Вам, куда Ваша установка Xinc поместила свои файлы. Таким образом даже при том, что Xinc является "всего" один большой Сценарий PHP, он все еще распространен в емкостно-резистивные сценарии и все те другие вещи, которые необходимы сделать выполнение приложения. Я уверен, что Вы не должны добавлять все пути, перечисленные там, но вероятно некоторые, чтобы заставить его работать.

Кроме самого Xinc, я думаю, что ему также нужен phpUnit, и набор другой ГРУШИ освобождает для выполнения, поэтому что я предложил бы, это:

pear config-get php_dir

И затем необходимо добавить что путь (как предложенный Henrik) к chroot среде.

2
ответ дан 4 December 2019 в 02:52
поделиться

Никогда используя 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.

1
ответ дан 4 December 2019 в 02:52
поделиться

Первый шаг должен был бы собрать информацию обо всем, что приложение должно выполнить; это, которое я обычно выполняю путем выполнения systrace (1) и ldd (1) для обнаружения, что необходимо для выполнения программного обеспечения.

Я дам этому попытку. Большая проблема, которую я нашел с xinc, - то, что, в то время как это - приложение PHP, он хочет знать пути установки приложения (все же, это все еще распространяет материал в другие папки), и выполняет некоторые Сценарии PHP в режиме демона (те сценарии, являющиеся самым твердым для получения выполнения). Так, например, я сказал этому устанавливать на/var/www/xinc и затем сделал символьную ссылку

/var/www/var/www/xinc->/var/www/xinc

и это частично работало. Я заставил GUI подходить бит, он отказался распознавать любые проекты, которые я настроил. Я думаю, что самая большая проблема состоит в том, что часть его выполняет chroot, и другая половина работает снаружи.

Если все остальное перестало работать, я собираюсь просто должным быть создать что-то, поскольку мы программируем внутри chrooted среды, так как наше производство является chrooted. Мы столкнулись с проблемами, где мы кодируем за пределами chroot и затем имеем для поддержки дорожки для нахождения то, что мы должны заставить ее работать в chroot.

1
ответ дан 4 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: