It would be nice if TomEE 'logs' the JNDI lookup path as the Reference Implementation (Glassfish) does! I had to say that. :)
On Sat, Apr 13, 2013 at 9:34 PM, José Luis Cetina <maxtorz...@gmail.com>wrote: > Congrats. Howard. Just FYI tomee logs the ejb "path" of all yours ejbs > deployed and is not necesary to implement an interface for use jndi. > > Good to see that you got a solution. > > Regards. > El 13/04/2013 19:58, "Howard W. Smith, Jr." <smithh032...@gmail.com> > escribió: > > > On Sat, Apr 13, 2013 at 1:00 PM, José Luis Cetina <maxtorz...@gmail.com > > >wrote: > > > > > When i dont want to use codi I use jndi lookup, it is to easy to use > and > > > portable. I create a simple method for retrive my ejbs without using > codi > > > instead i use jndi using only the name of the ejb class. > > > El 13/04/2013 11:45, "Howard W. Smith, Jr." <smithh032...@gmail.com> > > > escribió: > > > > > > > > José, > > > > JNDI works, thank you! This was the first time I 'ever' had to use JNDI > > lookup. I had to research it (search google, look at TomEE examples - ejb > > reference[1][2][3], surely did not want to create an 'interface', kept > > looking, looked at tomee log, as i know it lists all @EJBs at startup in > > the log, didn't see what i was looking for, so i looked at RI/Glassfish > > log, since i 'remembered' that RI/Glassfish mentions the JNDI lookup path > > for all my @EJB's in the glassfish log at 'startup' of my app)... > > > > So, per an oracle blog[4][5] about JNDI lookup and what i saw in > glassfish > > log (12/9/2012 was last time i used glassfish to start my app...smile), I > > modified the @Singleton @Lock(READ) bean, accordingly (see code below), > > tested it, and voila, it works!!!! :) > > > > > > /* > > * To change this template, choose Tools | Templates > > * and open the template in the editor. > > */ > > package converter; > > > > import java.util.concurrent.TimeUnit; > > > > import javax.ejb.AccessTimeout; > > import javax.ejb.Lock; > > import javax.ejb.LockType; > > import javax.ejb.Singleton; > > > > import javax.faces.component.UIComponent; > > import javax.faces.context.FacesContext; > > import javax.faces.convert.Converter; > > import javax.faces.convert.FacesConverter; > > > > import javax.naming.InitialContext; > > > > import jpa.entities.Customer; > > import jpa.session.CustomerFacade; > > > > > > @Singleton > > @Lock(LockType.READ) > > @AccessTimeout(value = 1, unit = TimeUnit.MINUTES) > > @FacesConverter(forClass = Customer.class) > > public class CustomerConverter implements Converter { > > > > public CustomerConverter() { > > > > } > > > > public Object getAsObject(FacesContext facesContext, UIComponent > > component, String value) { > > if (value == null || value.length() == 0) { > > return null; > > } > > /* > > * 2012-07-10 when user enters invalid/incomplete value (e.g. > > "irene", see below) in AutoComplete > > * > > WARNING: For input string: "irene" > > java.lang.NumberFormatException: For input string: "irene" > > at > > > > > java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) > > at java.lang.Integer.parseInt(Integer.java:492) > > at java.lang.Integer.valueOf(Integer.java:582) > > ... > > ... > > at > > > > > org.primefaces.component.autocomplete.AutoCompleteRenderer.getConvertedValue(AutoCompleteRenderer.java:529) > > at > > javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030) > > at > javax.faces.component.UIInput.validate(UIInput.java:960) > > * > > */ > > try { > > Integer test = getKey(value); > > } catch (java.lang.NumberFormatException e) { > > return null; > > } > > Object object = null; > > CustomerFacade ejbFacade; > > try { > > InitialContext ic = new InitialContext(); > > ejbFacade = (CustomerFacade) > > ic.lookup("java:global/mcmsweb/CustomerFacade"); > > if (ejbFacade == null) { > > System.err.println("CustomerConverter.getAsObject(): > > ejbFacade = null)"); > > return null; > > } > > } catch (Exception e) { > > System.err.println("CustomerConverter.getAsObject(): error on > > JNDI lookup of CustomerFacade"); > > e.printStackTrace(); > > return null; > > } > > try { > > object = ejbFacade.find(getKey(value)); > > } catch (Exception e) { > > System.err.println("CustomerConverter.getAsObject(): error on > > ejbFacade.find(getKey(value))"); > > e.printStackTrace(); > > return null; > > } > > return object; > > } > > > > java.lang.Integer getKey(String value) { > > java.lang.Integer key; > > key = Integer.valueOf(value); > > return key; > > } > > > > String getStringKey(java.lang.Integer value) { > > StringBuffer sb = new StringBuffer(); > > sb.append(value); > > return sb.toString(); > > } > > > > public String getAsString(FacesContext facesContext, UIComponent > > component, Object object) { > > if (object == null) { > > return null; > > } > > if (object instanceof Customer) { > > Customer o = (Customer) object; > > return getStringKey(o.getCustomerId()); > > } else { > > throw new IllegalArgumentException("object " + object + " is > of > > type " + object.getClass().getName() + "; expected type: " + > > Customer.class.getName()); > > } > > } > > } > > > > > > tomee examples - ejb reference > > [1] http://tomee.apache.org/examples-trunk/injection-of-ejbs/README.html > > [2] > > > > > http://tomee.apache.org/examples-trunk/lookup-of-ejbs-with-descriptor/README.html > > [3] http://tomee.apache.org/examples-trunk/lookup-of-ejbs/README.html > > > > oracle blogs > > [4] > > > > > https://blogs.oracle.com/kensaks/entry/application_specified_portable_jndi_names > > > > which references the following, but needed to replace 'sun' with 'oracle' > > in the URL > > > > [5] https://blogs.oracle.com/kensaks/entry/portable_global_jndi_names > > >