2012-02-07 5 views
0

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

================================================================================================================================================= ======== EDIT - новая информация ============

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

Bean создаваемого

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> 
+0

Можете ли вы показать код bean (включая импорт)? – perissf

+0

Я добавил – Rag

ответ

0

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

+0

благодаря вашему ответу. Из вашего объяснения и справедливого чтения других документов, я считаю, что ejb (как указано в Stateless, Stateful или Singleton), когда он упоминается как зависимость в другом классе, рекомендуется использовать «@EJB», чем «@Inject». Я попытался использовать этот принцип и внести изменения в классы в моем приложении. Теперь, когда я развертываю приложение (упакованное как война), оно развертывается отлично. Jboss сообщает, что компоненты, отмеченные аннотациями ejb, создаются и регистрируются в JNDI. Но когда я запускаю пользовательский интерфейс, я получаю исключение stackoverflow. Я объясню детали и код ниже – Rag

+0

, так как здесь не так много символов, я могу добавить данные в исходное сообщение ... – Rag

Смежные вопросы