Введите EJB в преобразователь JSF с JEE6 [дубликат]

12
задан BalusC 14 June 2010 в 22:37
поделиться

3 ответа

Я никогда не использовал JSF 2.0 (только 1.0), но в главе 5.4 спецификации сказано:

.

[...] разрешить контейнеру впрыскивать ссылки на ресурсы, управляемые контейнерами, в управляемый бобовый экземпляр, прежде чем он станет доступен для приложения JSF. Только бобы заявлены как находящиеся в запросе, сеанс или область применения доступен для инъекций ресурсов.

Но пока я понимаю, что поиск JNDI должен помочь.

6
ответ дан 2 December 2019 в 21:44
поделиться

Задача, которую вы пытаетесь выполнить, равносильна рисованию случайной точки из N-мерного единичного симплекса.

http://en.wikipedia.org/wiki/Simplex#Random_sampling может вам помочь.

Наивное решение может быть следующим:

public static double[] getArray(int n)
    {
        double a[] = new double[n];
        double s = 0.0d;
        Random random = new Random();
        for (int i = 0; i < n; i++)
        {
           a [i] = 1.0d - random.nextDouble();
           a [i] = -1 * Math.log(a[i]);
           s += a[i];
        }
        for (int i = 0; i < n; i++)
        {
           a [i] /= s;
        }
        return a;
    }

Чтобы вывести пункт равномерно из N-мерного единичного симплекса, мы должны взять вектор экспоненциально распределенных случайных величин, затем нормализовать его по сумме этих переменных. Для получения экспоненциально распределённого значения берем отрицательное регистрация равномерно распределённого значения.

-121--2254430-

Стандарт ничего не говорит о том, как реализовать полиморфизм. Один класс vtbl и один объект vptr - самый популярный способ. Надеюсь, следующий псевдокод будет полезен.

typedef struct {
    void (*show)(void* self);
    // more

} person_vtbl;

typedef struct {
      person_vtbl* vtbl;
      char         name[20];
} person;

void person_show(void* self) {
      cout<<"inside ... "<<static_cast<person*>(self)->name;
}
// more

static person_vtbl person_vtbl_ = { &person_show }; // vtbl for person class

void person_ctor(void* self, char const* name) {
      person* p = static_cast<person*>(self);
      strcpy(p->name, name);
      p->vtbl   = &person_vtbl  // vptr of person object
}

typedef struct {
    person base;
    int    scale;
} teacher;

void teacher_show(void* self) {
      cout<<"inside the tearch ... "<<static_cast<teacher*>(self)->scale;
}
static person_vtbl teacher_vtbl_ = { &teacher_show };

void teacher_ctor(void* self, char const* name, int s) {
      teacher* t = static_cast<teacher*>(self);
      person_ctor(&t->base, name);     // construct base part
      t->scale   = s;                  // construct teacher part
      t->vtbl    = &teacher_vtbl_;     // vptr of teacher object
}

// construct teacher :
// person* ptr = new teacher("Zia", 16);

teacher* tmp = static_cast<teacher*>( malloc( sizeof *tmp );
teacher_ctor(tmp, "Zia", 16);  // vptr of tmp points to teacher_vtbl_
person* ptr = &tmp->base;

// call virtual function though pointer
// ptr->show()

ptr->vptr->show(ptr); // call teacher_show(ptr);
-121--3787356-

Другим (еще не таким симпатичным) решением может быть использование связывания вместо converterId. Использование только управляемых компонентов JSF:

< f: converter binding = «# {app.personConverter} »/>

Где appBean обозначает нечто подобное: @ ManagedBean (имя = «приложение») @ StartScoped класс AppBean { @ EJB PersonService ps; частный конвертер PersonConverter; }

В CDI-стиле (JSR-299) МОЖЕТ быть более подходящее решение, но не удалось выполнить это:

< f: converter binding = «# {cdiBean} »/>

Где cidBean должен быть: @ Именованный класс CdiBean реализует Converter {@ EJB...}

Сбой при вызове поведения по умолчанию для запроса идентификатора converter-id, переданного в конструкторе '

Anyhow first approach using binding and app scoped JSF bean works .

2
ответ дан 2 December 2019 в 21:44
поделиться

Расширение Seam Faces для JSF 2.0 и CDI позволяет поддерживать @Inject непосредственно в валидаторах и конвертерах.

Проверьте это: http://ocpsoft.com/java/seam-faces-3-0-0-alpha2-jsf-2-0-just-got-even-easier/

2
ответ дан 2 December 2019 в 21:44
поделиться
Другие вопросы по тегам:

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