Hi all,
In my efforts to work work with velocity to generate tempalted emails,
I got stuck with the classLoading problems, which I don't seem to pass.
I get the followig error:
" Unable to find resource 'resources.UserLoginInfo.vm' "
I tried a more general test to just load a simple properties file
and failed too...
| ClassLoader classLoader = this.getClass().getClassLoader();
| InputStream istream =
classLoader.getResourceAsStream("resources.application.properties");
|
Note: the resource name is with a dot "." resource.application.propperties.
Now, it's strange cause the struts modules picks it up without any problem. Though
here I called these lines from a method in one of my EJB entities. Anyway, in return I
get null.
My application is contains the Logic (and EJB module) and Web (web module). the
UserLoginInfo.vm is located under the resources directory.
Here is my Emailer.java:
Code:
| /**
| * A utility class that provides API for sending
| * templated emails per application use case.
| * <p>The <code>Emailer</code> uses Velocity SDK to generate
| * the templated emails.
| *
| * @author Erez Efrati
| * @version $Revision:$ $Date:$
| */
| public class Emailer {
|
| /**
| * JNDI context for JavaMail sessions.
| */
| private static final String JNDI_JAVA_MAIL = "java:/Mail";
|
| /**
| * The content type of the HTML email messages.
| */
| private static final String HTML_CONTENT_TYPE = "text/html;charset=UTF-8";
|
| /**
| * The user-login-info email template resource name.
| */
| private static final String VM_USER_LOGIN_INFO_REMINDER
| = "resources.UserLoginInfo.vm";
|
| // Velocity variable names keys
| private static final String VMVAR_USER = "user";
| private static final String VMVAR_SUBJECT = "subject";
|
| /**
| * the engine instance
| */
| VelocityEngine m_engine = new VelocityEngine ();
|
| // ------------------------------------------------------ Private Methods
|
|
| /**
| * Configures the engine to use classpath to find templates
| *
| * @param engine the engine to configure
| * @throws Exception thrown if an errors occures
| */
| private void configure (VelocityEngine engine) throws Exception
| {
| Properties props = new Properties ();
| props.setProperty (VelocityEngine.RESOURCE_LOADER, "classpath");
| props.setProperty ("classpath." + VelocityEngine.RESOURCE_LOADER +
".class",
|
ClasspathResourceLoader.class.getName());
| m_engine.init (props);
| }
|
|
| /**
| * Creates a Velocity context
| */
| private VelocityContext createContext()
| {
| VelocityContext ctx = new VelocityContext ();
| return ctx;
| }
|
| /**
| * Retreives a new JavaMail Mime message
| *
| * @return
| * @throws NamingException
| */
| private MimeMessage createMimeMessage() throws NamingException
| {
| Context initCtx = new InitialContext ();
| Session session = (Session)initCtx.lookup (JNDI_JAVA_MAIL);
| MimeMessage message = new MimeMessage (session);
| return message;
| }
|
| // ------------------------------------------------------ Public Methods
|
| /**
| * Default constructor, configures the velocity engine.
| *
| * @throws Exception, if an error occures
| */
| public Emailer () throws Exception
| {
| configure (m_engine);
| }
|
|
| /**
| * Sends an email to the specified <code>user</code> containing
| * his login information which includes his username and password.
| *
| * @param user
| * @throws Exception
| */
| public void sendUserLoginInfo (User user) throws Exception
| {
| // retrieve the email template
| Template template = m_engine.getTemplate (VM_USER_LOGIN_INFO_REMINDER);
|
| // prepare the context and store data objects in it
| VelocityContext ctx = createContext ();
| ctx.put (VMVAR_USER, user);
|
| // merge the template
| StringWriter writer = new StringWriter ();
| template.merge (ctx, writer);
| writer.close ();
|
| // retrieve the message subject and text. The subject
| // is formulated as part of the email velocity template.
| StringBuffer text = writer.getBuffer();
| String subject = (String)ctx.get (VMVAR_SUBJECT);
|
| // create a new message to work with
| MimeMessage message = createMimeMessage ();
|
| // retrieve the user's email address
| String to = user.getEmail ();
|
| String from = App.getSupportEmailAddress ();
| message.setFrom (new InternetAddress (from));
| message.addRecipient (Message.RecipientType.TO,
| new InternetAddress (to));
|
| // set the subject and content
| message.setSubject (subject);
| message.setContent (text, HTML_CONTENT_TYPE);
|
| // Send message
| Transport.send (message);
|
| }
|
|
Why doesn't it work? What am I missing?
One more thing I maybe should point out as well - The emailer
is called from my 'UserServiceBean' which is a stateless Session bean.
I hope this is valid, is it?
I would really appreciate any help here.
Thanks in advance,
Erez
<a
href="http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3827633#3827633">View
the original post</a>
<a
href="http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3827633>Reply
to the post</a>
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user