JNDI and java: context problem
fla83tn Jul 23, 2006 8:35 PMHi,
In my project I'd like to send an e-mail from my message-driven bean but I have 2 problem.
First of all this is my problematic code:
private void send(Context c,String to){ javax.mail.Session session = null; try { session = ---- see after ----- MimeMessage m = new MimeMessage(session); m.setFrom(); m.setRecipients(javax.mail.Message.RecipientType.TO, InternetAddress.parse(to, false)); m.setSubject("Pinestore Order confirmation"); m.setSentDate(new Date()); m.setContent("The Order has been processed", "text/plain"); //equivalent to setText.. Store s = session.getStore(); s.connect(); // POP authentication Transport.send(m); System.out.println("Message sent OK."); } catch (javax.mail.MessagingException e) { e.printStackTrace(); } catch (javax.naming.NamingException e) { e.printStackTrace(); } } public static void main(String args[]){ Context c = null; try { Hashtable environment = new Hashtable(); environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); environment.put(Context.PROVIDER_URL, "jnp://localhost:1099"); c =new InitialContext(environment); } catch (NamingException ex) { } send(c,"xxx@domain"); }
This are my question:
this is only because I have some confusion:
Why couldn't I access to resources in jndi at java:comp/env?
If I do
Context c = b.getInitialContext(); Context compEnv = (Context) c.lookup("java:comp/env");
compEnv is null..the only things that work is c.lookup("") or lookup of everything that is located under Global JNDI Namespace..
My second question is:
If I leave the default
<attribute name="JNDIName">java:/Mail</attribute>in file mail-service.xml I can't manage to lookup via jndi to the MBean...this because the java: context seems to be invisible..only names that are in Global JNDI Namespace are visible..
So I try to get around the problem modifying the file mail-service.xml as
<attribute name="JNDIName">Mail</attribute>so now I can do in my code:
session = (javax.mail.Session)PortableRemoteObject.narrow( c.lookup("Mail"), javax.mail.Session.class);
In this case the lookup works, but now I get still error because javax.mail.Session isn't a remote interface and then I can not do a PortableRemoteObject.narrow...
Somewhere I read that:
"objects referenced behind the java: root are not reachable by external JNDI calls, they are private to the VM of the server."
Is it true? How can I solve the problem?
Instead for the last error I don't know how to bind the result of the lookup..
Please somebody help me!!!!!