Как настроить быстрый запуск калитки для использования CDI шва-калитки? - PullRequest
1 голос
/ 23 июля 2011

Что мне нужно сделать, чтобы CDI работал в моем проекте быстрого старта калитки? Когда я пытаюсь запустить сервер Jetty, я получаю исключение:

org.jboss.seam.solder.beanManager.BeanManagerUnavailableException: Failed to locate BeanManager using any of these providers: org.jboss.seam.solder.beanManager.DefaultJndiBeanManagerProvider(11), org.jboss.seam.solder.beanManager.ServletContainerJndiBeanManagerProvider(10)
at org.jboss.seam.solder.beanManager.BeanManagerLocator.getBeanManager(BeanManagerLocator.java:91)
at org.jboss.seam.wicket.SeamApplication.internalInit(SeamApplication.java:54)
at org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:723)
...

Я создаю проект калитки. Я не знаю в первую очередь о Seam, Weld или CDI; Я хочу научиться этому, включив его в небольшой проект. Я следую этой справочной документации:

http://docs.jboss.org/seam/3/wicket/latest/reference/en-US/html_single/

Прямо сейчас я плаваю в море чужой документации, пытаясь найти ответ. Помогите!

Edit:

Сервер Jetty в быстром старте калитки создается программно. На основании приведенной ниже документации я создал:

webapp/WEB-INF/jetty-env.xml

<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
   "http://jetty.mortbay.org/configure.dtd">
<Configure id="webAppCtx" class="org.mortbay.jetty.webapp.WebAppContext">
   <New id="BeanManager" class="org.mortbay.jetty.plus.naming.Resource">
      <Arg><Ref id="webAppCtx"/></Arg> 
      <Arg>BeanManager</Arg>
      <Arg>
         <New class="javax.naming.Reference">
            <Arg>javax.enterprise.inject.spi.BeanManager</Arg> 
            <Arg>org.jboss.weld.resources.ManagerObjectFactory</Arg>
            <Arg/>
         </New>
      </Arg>
   </New>
</Configure>

В web.xml я добавил следующий фрагмент:

<resource-env-ref>
    <resource-env-ref-name>BeanManager</resource-env-ref-name>
    <resource-env-ref-type>
javax.enterprise.inject.spi.BeanManager
    </resource-env-ref-type>
</resource-env-ref>

<listener>
    <listener-class>org.jboss.seam.solder.resourceLoader.servlet.ResourceListener</listener-class>
</listener>

Следующий код Java отвечает за настройку сервера Jetty в среде быстрого запуска при запуске Start:

    Server server = new Server();
    SocketConnector connector = new SocketConnector();

    // Set some timeout options to make debugging easier.
    connector.setMaxIdleTime(1000 * 60 * 60);
    connector.setSoLingerTime(-1);
    connector.setPort(8080);
    server.setConnectors(new Connector[] { connector });

    WebAppContext bb = new WebAppContext();
    bb.setServer(server);
    bb.setContextPath("/");
    bb.setWar("src/main/webapp");
    // FIXME: This doesn't seem to do anything? bb.addEventListener(new ResourceListener());
    server.addHandler(bb);

/* I don't know what this commented code does, but it doesn't fix the problem when uncommented. */
// START JMX SERVER
// MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
// MBeanContainer mBeanContainer = new MBeanContainer(mBeanServer);
// server.getContainer().addEventListener(mBeanContainer);
// mBeanContainer.start();

Я использую причал версии 6.1.25, согласно моим зависимостям Maven.

Ответы [ 2 ]

1 голос
/ 10 сентября 2011

Сотрудники 42Lines опубликовали библиотеку интеграции Wicket-CDI , включающую рабочий пример проекта.

Некоторые из этих парней на самом деле являются приверженцами калитки; они пишут хороший код и знают, что делают.

1 голос
/ 25 июля 2011

В контейнере сервлета вам нужно самостоятельно загрузить Weld CDI, чтобы сделать его доступным для Seam.В документации указывается это при установке:
http://docs.jboss.org/seam/3/wicket/latest/reference/en-US/html_single/#wicket.installation

Со ссылкой на соответствующую документацию по начальной загрузке Сварки для Jetty 6 или 7:

http://docs.jboss.org/weld/reference/latest/en-US/html/environments.html#d0e5286

Он должен нормально работать после настройки Jetty для начальной загрузки Weld.Однако, пожалуйста, не принимайте ограничения использования Weld в контейнере сервлета:
http://docs.jboss.org/weld/reference/latest/en-US/html/environments.html#d0e5221

Также убедитесь, что у вас есть пустой (или настроенный) beans.xml в вашем каталоге WEB-INF /.

...