Не удается загрузить JSF, когда зависимый EJB-компонент помечен @EJB - PullRequest
0 голосов
/ 07 февраля 2012

Первоначальная проблема была из-за смешивания CDI с EJB, который сейчас вроде как решен.Но следующая проблема возникает после использования аннотаций EJB вместо Inject. *

===================================== РЕДАКТИРОВАТЬ - Новая информация ============

Похоже, что JSFServlet не может найти EJB-компонент, 'tauthenticator'при загрузке login.xhtml.Также, когда я смотрю на bean-компоненты jmx в консоли администратора Jboss, имя регистрируется как «Tauthenticator» вместо «tauthenticator».я не знаю, является ли это проблемой, так как для представления требуется управляемый компонент 'tauthenticator'

Создаемый компонент

21:09:42,602 INFO  [org.jboss.ejb3.nointerface.impl.jndi.AbstractNoInterfaceViewBinder] Binding the following entry in Global JNDI for bean:Tauthenticator
        Tauthenticator/no-interface -> EJB3.1 no-interface view
[org.jboss.ejb3.nointerface.impl.jndi.AbstractNoInterfaceViewBinder] Binding the following entry in Global JNDI for bean:TusersBean
        TusersBean/no-interface -> EJB3.1 no-interface view

Частичная трассировка стека при доступе к http://localhost:8080/timesheet/login.html:

javax.servlet.ServletException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)
org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67)
root cause

java.lang.StackOverflowError
java.lang.String.toLowerCase(String.java:2496)
javax.naming.NameImpl.toBoolean(NameImpl.java:202)
javax.naming.NameImpl.getBoolean(NameImpl.java:198)
javax.naming.NameImpl.recordNamingConvention(NameImpl.java:231)
javax.naming.NameImpl.<init>(NameImpl.java:254)
javax.naming.NameImpl.<init>(NameImpl.java:291)
javax.naming.CompoundName.<init>(CompoundName.java:168)
javax.naming.CompoundName.clone(CompoundName.java:260)
org.jnp.interfaces.NamingContext.composeName(NamingContext.java:1078)
org.jnp.interfaces.NamingContext.getAbsoluteName(NamingContext.java:1931)
org.jnp.interfaces.NamingContext.lookup(NamingContext.java:719)
org.jnp.interfaces.NamingContext.lookup(NamingContext.java:688)
sun.reflect.GeneratedMethodAccessor411.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.jboss.ejb3.EJBContainer$1.invoke(EJBContainer.java:978)
$Proxy459.lookup(Unknown Source)
org.jboss.ejb3.JndiUtil.lookup(JndiUtil.java:44)

Извлечение Tauthenticator

@StatefulTimeout(unit=TimeUnit.MINUTES, value=500) @Stateful
@Named("tauthenticator")  public class Tauthenticator {
@Getter @Setter private String username;
@Getter @Setter private String password;
@Getter @Setter boolean loggedIn = false;   
@Getter @Setter Tusers users = null;
@EJB TusersBean usersBean;
@Inject private Event<ExceptionToCatch> catchEvent;

public String authenticate() {

Извлечение из login.xhtml

<h:outputLabel for="username" style="font-weight:bold;">#{' '}Username</h:outputLabel>
<p:inputText id="username" value="#{tauthenticator.username}"/>
<h:outputLabel for="password" style="font-weight:bold;">#{' '}Password</h:outputLabel>
<p:password id="password" value="#{tauthenticator.password}" feedback="false"/>
<h:outputLabel>#{''}</h:outputLabel>

1 Ответ

0 голосов
/ 07 февраля 2012

Вы смешиваете CDI (через импорт javax.enterprise.context.RequestScoped) и EJB (через javax.ejb.Stateful) в одном бине.Более того, эти аннотации имеют совершенно разные области действия, поэтому вы должны решить, какую область использовать.И вы должны решить, хотите ли вы использовать Enterprise Java Bean или CDI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...