Setup Email Notification

349 views
Skip to first unread message

Varun Parakh

unread,
Apr 8, 2016, 5:49:17 PM4/8/16
to javamelody
Hi,
I have a 3rd party application war file which we deploy using standard tomcat configuration. We placed the 2 files under the webapps/lib folder of the application.
URL is like http://<servername>:<port>/<appid>/monitoring

Now the documentation tells me to run the Resource name tag in the Tomcat server.xml (<tomcat basedir>/conf/server.xml) as below

<Resource name="mail/JMMailSession" auth="Container" type="javax.mail.Session"
mail.smtp.host="stmp.mail.com"
mail.smtp.user="userabc"
mail.from="no-r...@abc.com"
/>

and put the
<Parameter name='javamelody.admin-emails' value='a...@xyz.com,adm...@xyz.com' override='false'/>
<Parameter name='javamelody.mail-session' value='mail/JMMailSession' override='false'/>

under context.xml file. I did that and still not able to check if the email if working.

Below is the complete server.xml after adding the resource name tag.

Thanks,
Varun


SERVER.XML FILE

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

<!-- Global JNDI resources
Documentation at /docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />

<Resource name="mail/JMMailSession"
auth="Container"
type="javax.mail.Session"
mail.smtp.host="outbound.abc.com"
mail.smtp.user="abcdef"
mail.from="no-r...@abc.com" />

</GlobalNamingResources>

<!-- A "Service" is a collection of one or more "Connectors" that share
a single "Container" Note: A "Service" is not itself a "Container",
so you may not define subcomponents such as "Valves" at this level.
Documentation at /docs/config/service.html
-->
<Service name="Catalina">

<!--The connectors can use a shared executor, you can define one or more named thread pools-->
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->


<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector port="8800" protocol="HTTP/1.1"
connectionTimeout="120000"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="120000"
redirectPort="8443" />
-->
<!-- Define a SSL HTTP/1.1 Connector on port 8443
This connector uses the BIO implementation that requires the JSSE
style configuration. When using the APR/native implementation, the
OpenSSL style configuration is required as described in the APR/native
documentation -->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


<!-- An Engine represents the entry point (within Catalina) that processes
every request. The Engine implementation for Tomcat stand alone
analyzes the HTTP headers included with the request, and passes them
on to the appropriate Host (virtual host).
Documentation at /docs/config/engine.html -->

<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<Engine name="Catalina" defaultHost="localhost">

<!--For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) -->
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->

<!-- Use the LockOutRealm to prevent attempts to guess user passwords
via a brute-force attack -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>

<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">

<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->

<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>
</Engine>
</Service>
</Server>


Vernat Emeric

unread,
Apr 9, 2016, 5:46:29 AM4/9/16
to javam...@googlegroups.com
Hi Varun,

The user's guide says to add the mail session in the tomcat context of your webapp (xml file located in <tomcat_home>/conf/Catalina/localhost/ or in <tomcat_home>/conf/server.xml). [1]
You have not done that.

You can for example, add the following:

<Resource name="mail/JMMailSession" auth="Container" type="javax.mail.Session"
mail.smtp.host="stmp.mail.com"
mail.smtp.user="userabc"
mail.from="no-r...@abc.com"
/>

next to
<Parameter name='javamelody.admin-emails' value='a...@xyz.com,adm...@xyz.com' override='false'/>
<Parameter name='javamelody.mail-session' value='mail/JMMailSession' override='false'/>

--

---
You received this message because you are subscribed to the Google Groups "javamelody" group.
To unsubscribe from this group and stop receiving emails from it, send an email to javamelody+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Varun Parakh

unread,
Apr 12, 2016, 7:09:45 PM4/12/16
to javamelody
Hi Emeric,

I made the changes to server.xml file as you mentioned. (under <tomcat_home>/conf/server.xml). What would be the way to test it? what time of the day does it sends email out and in case of any errors will it write to catalina.out?


Now the file looks like :
SERVER.XML FILE
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

    <Resource name="mail/JMMailSession"
auth="Container"
type="javax.mail.Session"
mail.smtp.host="outbound.abc.com"
mail.smtp.user="abcdef"
mail.from="no-r...@abc.com" />

    <Parameter name='javamelody.admin-emails' value='a...@xyz.com,admin2@xyz.com' override='false'/>  
    <Parameter name='javamelody.mail-session' value='mail/JMMailSession' override='false'/>

<!-- Global JNDI resources
Documentation at /docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
  .......
.......
.......

Thanks,
Varun




On Saturday, April 9, 2016 at 2:46:29 AM UTC-7, evernat wrote:
Hi Varun,

The user's guide says to add the mail session in the tomcat context of your webapp (xml file located in <tomcat_home>/conf/Catalina/localhost/ or in <tomcat_home>/conf/server.xml). [1]
You have not done that.

You can for example, add the following:
<Resource name="mail/JMMailSession" auth="Container" type="javax.mail.Session"
mail.smtp.host="stmp.mail.com"
mail.smtp.user="userabc"
mail.from="no-...@abc.com"
/>

next to
<Parameter name='javamelody.admin-emails' value='a...@xyz.com,admin2@xyz.com' override='false'/>
<Parameter name='javamelody.mail-session' value='mail/JMMailSession' override='false'/>

Hi,
I have a 3rd party application war file which we deploy using standard tomcat configuration. We placed the 2 files under the webapps/lib folder of the application.
URL is like http://<servername>:<port>/<appid>/monitoring

Now the documentation tells me to run the Resource name tag in the Tomcat server.xml (<tomcat basedir>/conf/server.xml) as below

<Resource name="mail/JMMailSession" auth="Container" type="javax.mail.Session"
mail.smtp.host="stmp.mail.com"
mail.smtp.user="userabc"
mail.from="no-...@abc.com"
/>

and put the
<Parameter name='javamelody.admin-emails' value='a...@xyz.com,admin2@xyz.com' override='false'/>
<Parameter name='javamelody.mail-session' value='mail/JMMailSession' override='false'/>

under context.xml file. I did that and still not able to check if the email if working.

Below is the complete server.xml after adding the resource name tag.

Thanks,
Varun

"
              mail.smtp.user="abcdef"
              mail.from="no-...@abc.com" />

Varun Parakh

unread,
Apr 14, 2016, 3:04:25 PM4/14/16
to javamelody
Hi Emeric,

I tried to test the Mail_test and received the following error message:

Apr 14, 2016 11:52:09 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [default] in context with path [/sabrix] threw exception
java.lang.IllegalStateException: itext classes not found: add the itext dependency
        at net.bull.javamelody.Action.mailTest(Action.java:279)
        at net.bull.javamelody.Action.execute(Action.java:172)
        at net.bull.javamelody.MonitoringController.executeActionIfNeeded(MonitoringController.java:123)
        at net.bull.javamelody.MonitoringController.doActionIfNeededAndReport(MonitoringController.java:136)
        at net.bull.javamelody.MonitoringFilter.doMonitoring(MonitoringFilter.java:353)
        at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:169)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
        at com.sabrix.te.web.filter.ContextCleanupFilter.doFilter(ContextCleanupFilter.java:87)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:166)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
        at org.owasp.csrfguard.CsrfGuardFilter.doFilter(CsrfGuardFilter.java:59)
        at com.thomsonreuters.filter.DelegatingMimeTypeFilter.doFilter(DelegatingMimeTypeFilter.java:98)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at com.sabrix.te.web.filter.LocaleSettingFilter.doFilter(LocaleSettingFilter.java:173)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
        at com.mulesoft.tcat.monitoring.tomcat.Tomcat55AgentValve.invoke(Tomcat55AgentValve.java:20)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)

Apr 14, 2016 11:52:18 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [default] in context with path [/sabrix] threw exception
java.lang.IllegalArgumentException: No enum constant net.bull.javamelody.Action.
        at java.lang.Enum.valueOf(Enum.java:236)
        at net.bull.javamelody.Action.valueOf(Action.java:47)
        at net.bull.javamelody.Action.valueOfIgnoreCase(Action.java:123)
        at net.bull.javamelody.MonitoringController.executeActionIfNeeded(MonitoringController.java:113)
        at net.bull.javamelody.MonitoringController.doActionIfNeededAndReport(MonitoringController.java:136)
        at net.bull.javamelody.MonitoringFilter.doMonitoring(MonitoringFilter.java:353)
        at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:169)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
        at com.sabrix.te.web.filter.ContextCleanupFilter.doFilter(ContextCleanupFilter.java:87)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:166)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
        at org.owasp.csrfguard.CsrfGuardFilter.doFilter(CsrfGuardFilter.java:59)
        at com.thomsonreuters.filter.DelegatingMimeTypeFilter.doFilter(DelegatingMimeTypeFilter.java:98)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at com.sabrix.te.web.filter.LocaleSettingFilter.doFilter(LocaleSettingFilter.java:173)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
        at com.mulesoft.tcat.monitoring.tomcat.Tomcat55AgentValve.invoke(Tomcat55AgentValve.java:20)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)

Thanks,
Varun

evernat

unread,
Apr 15, 2016, 11:49:17 AM4/15/16
to javamelody
Hi,

As said in the log and in the user's guide, you need to add the iText dependency in your webapp.
For example, download the iText file and copy it into the WEB-INF/lib directory of your webapp.

bye,
Emeric
Reply all
Reply to author
Forward
0 new messages