When we need HttpSessionBindingListener?

The HttpSessionBindingListener interface is implemented when an object needs to be notified if it's being bound to a session or unbound from a session.

Objects implement this interface so that they can be notified when they are being bound or unbound from a HttpSession. When a binding occurs (using HttpSession.setAttribute()) HttpSessionBindingEvent communicates the event and identifies the session into which the object is bound. Similarly, when an unbinding occurs (using HttpSession.removeAttribute()) HttpSessionBindingEvent communicates the event and identifies the session from which the object is unbound.

This interface has two methods, that are notified when the status of the object has changed:

  • public void valueBound(HttpSessionBindingEvent event) : Notifies the object that it is being bound to a session and identifies the session.
  • public void valueUnbound(HttpSessionBindingEvent event) : Notifies the object that it is being unbound from a session and identifies the session.

Note, this listener will not be declared in the deployment descriptor as the same as HttpSessionActivationListener interface. The container at runtime will introspect this object to see if it implements the HttpSessionActivationListener and/or HttpSessionBindingListener and fires appropriate events to the object.

These methods have a HttpSessionBindingEvent parameter that can be used to retrieve the session that the object was bound to and the name it was given in the session.

Class HttpSessionBindingEvent

Events of this type are either sent to an object that implements HttpSessionBindingListener when it is bound or unbound from a session, or to a HttpSessionAttributeListener that has been configured in the deployment descriptor when any attribute is bound, unbound or replaced in a session.

The session binds the object by a call to HttpSession.setAttribute and unbinds the object by a call to HttpSession.removeAttribute.

The methods of this object that are used to get the name that's assigned to the object, the session it's bound to, and the actual object:

  • public String getName() : Returns the name with which the attribute is bound to or unbound from the session.
  • public Object getValue() : Returns the value of the attribute that has been added, removed or replaced. If the attribute was added (or bound), this is the value of the attribute. If the attrubute was removed (or unbound), this is the value of the removed attribute. If the attribute was replaced, this is the old value of the attribute.
  • public HttpSession getSession() : Return the HttpSession that the object was bound to or unbound from.

Delete .svn directories recursively

I am here showing an example of a unix command, which recursively deletes subversion .svn folders. Subversion is a widely used open-source revision control application. Every copy of source code received from subversion repository has .svn folders, which store metadata. However, if you want to use or distribute source code, these .svn folder are often not necessary.

To remove this we can follow the following steps:

We use find command to find all .svn folders beginning from current directory.

$ find . -type d -name .svn ./.svn ./sourceA/.svn ./sourceB/.svn ./sourceB/module/.svn ./sourceC/.svn

Now pass this to RM command using grave accent quotes (key (`) to left of ‘1’)

$ rm -rf `find . -type d -name .svn`

If you need to remove the .svn very frequently then simply save this command inside a script and execute that whenever is required.

Hope this helps 🙂

SVN Cleanup fails – how to resume

Today I was  trying to cleanup a project, I got error.

I tried deleting the log file in the .svn directory and I also deleted the offending file in .svn/props-base

then did the cleanup. It works and I resumed my updates.

In some cases you need to apply the same in parent folder as well.

Debugging Hibernate using Log4J Logs

People who work with Hibernate often want to see, what SQL it is prepairing behind the seen and how it is mapping in real for debug purpose. We can achieve this by enable log4j for Hibernate classes. This will give a detailed debug info.

If using log4j.properties, enter the below line at end:

### log JDBC bind parameters ###
log4j.logger.net.sf.hibernate.type=debug

### log prepared statement cache activity ###
log4j.logger.net.sf.hibernate.ps.PreparedStatementCache=debug

If using log4j XML file, enter below line before <root>:

<logger name="org.hibernate">
    <level value="debug"/>
</logger>

<logger name="org.hibernate.SQL">
    <level value="debug"/>
</logger>

<logger name="org.hibernate.type">
    <level value="debug"/>
</logger>

Happy Coding 🙂

HowTo Get RID of Just-In-Time debugger

I installed Visual Studio, and with this it installed a Just-In-time script debugger .This Just-In-Time seems to come up all the time when I run Internet Explore and on each page of IE.

 Solution

Open Start>Control Panels>Internet Options: Advanced and activate (check box)

* Disable Script Debugging (Internet Explorer)
* Disable Script Debuggung (Other)

Open the registry (use regedit, Click Start, Run, Regedit).

Go to this key:

HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings\JITDebug

And set it to 0.

java.security.NoSuchAlgorithmException: No implementation for AES/CBC/NoPadding found

Hi,

From past few days I and my few team members were getting the following error during LDAP authentication:

javax.net.ssl.SSLException: Algorithm missing:  
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.f(DashoA12275)
    at com.sun.net.ssl.internal.ssl.SunJSSE_ax.a(DashoA12275)
    at com.sun.net.ssl.internal.ssl.SunJSSE_az.j(DashoA12275)
    at com.sun.net.ssl.internal.ssl.SunJSSE_az.a(DashoA12275)
    at com.sun.net.ssl.internal.ssl.SunJSSE_az.a(DashoA12275)
    at com.sun.net.ssl.internal.ssl.SunJSSE_ax.a(DashoA12275)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA12275)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.j(DashoA12275)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(DashoA12275)
    at com.xx.cat.fndt.auth.impl.ssl.TrustingSSLSocketFactory.getSSLSocket(TrustingSSLSocketFactory.java:147)
    at com.xx.cat.fndt.auth.impl.ssl.TrustingSSLSocketFactory.makeSocket(TrustingSSLSocketFactory.java:209)
    at netscape.ldap.LDAPConnSetupMgr.connectServer(LDAPConnSetupMgr.java:411)
    at netscape.ldap.LDAPConnSetupMgr.openSerial(LDAPConnSetupMgr.java:343)
    at netscape.ldap.LDAPConnSetupMgr.connect(LDAPConnSetupMgr.java:237)
    at netscape.ldap.LDAPConnSetupMgr.openConnection(LDAPConnSetupMgr.java:163)
    at netscape.ldap.LDAPConnection.connect(LDAPConnection.java:1033)
    at netscape.ldap.LDAPConnection.connect(LDAPConnection.java:915)
    at netscape.ldap.LDAPConnection.connect(LDAPConnection.java:759)
    at com.xx.cat.fndt.auth.impl.ldap.LDAPAuthenticationInterface.getConnection(LDAPAuthenticationInterface.java:309)
    at com.xx.cat.fndt.auth.impl.ldap.LDAPAuthenticationInterface.getAuthenticatedConnection(LDAPAuthenticationInterface.java:248)
    at com.xx.cat.fndt.auth.impl.ldap.LDAPAuthenticationInterface.authenticate(LDAPAuthenticationInterface.java:69)
    at com.xx.qoc.svc.qoms.model.service.AdminManagerImpl.authenticateUser(AdminManagerImpl.java:71)
    at com.xx.qoc.svc.qoms.controller.QomsLogn010InptController.onSubmit(QomsLogn010InptController.java:208)
    at org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:267)
    at org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:250)
    at com.xx.qoc.svc.qoms.controller.QomsLogn010InptController.handleRequestInternal(QomsLogn010InptController.java:160)
    at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:857)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:475)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:440)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at com.xx.qoc.fndt.filter.BlackoutFilter.doFilter(BlackoutFilter.java:257)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at com.xx.qoc.fndt.filter.PropertiesFilter.doFilter(PropertiesFilter.java:178)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at com.xx.qoc.fndt.filter.LoggingFilter.doFilter(LoggingFilter.java:152)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at com.xx.qoc.fndt.filter.RequestHeadersFilter.doFilter(RequestHeadersFilter.java:104)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at com.xx.qoc.fndt.filter.ExceptionHandlerFilter.doFilter(ExceptionHandlerFilter.java:105)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:534)
Caused by: java.security.NoSuchAlgorithmException: Could not create cipher AES/128
    at com.sun.net.ssl.internal.ssl.CipherBox$JCECipherBox.a(DashoA12275)
    at com.sun.net.ssl.internal.ssl.SunJSSE_h.a(DashoA12275)
    at com.sun.net.ssl.internal.ssl.CipherSuite$BulkCipher.a(DashoA12275)
    at com.sun.net.ssl.internal.ssl.SunJSSE_ax.c(DashoA12275)
    … 63 more
Caused by: java.security.NoSuchAlgorithmException: No implementation for AES/CBC/NoPadding found
    at com.sun.net.ssl.internal.ssl.SunJSSE_i.d(DashoA12275)
    at com.sun.net.ssl.internal.ssl.SunJSSE_i.a(DashoA12275)
    at com.sun.net.ssl.internal.ssl.CipherBox$JCECipherBox.<init>(DashoA12275)
    … 67 more

I checked the java.security and found that all the providers are registered correctly:
security.provider.1=sun.security.provider.Sun
security.provider.2=com.sun.net.ssl.internal.ssl.Provider
security.provider.3=com.sun.rsajca.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider

I did some analysis, when i run the code from a windows batch file, it works but if i run it within Eclipse, it throws this Algorithm not found exception. i checked the JVM version and classpath and it looks okay.

I make a little program to find out whether all the providers are available during runtime or not
 Provider[] provs = Security.getProviders();

In result I get only one privider and all other were missing. The jar was not getting loaded in eclipse tomcat during runtime.

For solution, I added following three jar files in tomcat boot classpath and it worked form me and my team members Smile

-rt.jar
-jsse.jar
-jce.jar

Rename log4j.properties

Some time the need arises to have our log4j.properties with different name. By default, if no other configuration is given, log4j will search your classpath for a 'log4j.properties' file.

Now to use your own named log4j property add the following line in your main program:

  PropertyConfigurator.configure("File  name with path")

exmaple:

 PropertyConfigurator.configure("c:\\logs\\my-log4j.properties")   this will set this as a default property name and all done =)

GURFL data

GURFL file is a list of operators and their associated IP address ranges. This is a good way to find out from which mobile carrier (ie. which country) does a request come from.

Earlier it was available at:http://www.whirlymobile.com/resources/gurfl/operator.csv 

But now days it is down. So I am attaching the last GURFL updated operators.csv file here

Log4j errors : log4j:WARN No appenders could be found for logger, log4j:WARN Please initialize the log4j system properly

This is a very common problem, it occurs when log4j.properties not found in classpath.

Create a file called log4j.properties. Place it in the root folder where your java classes are found. When log4j initializes, it will look for a file named EXACTLY log4j.properties (if you are using a properties file).

Another alternate way is to put the path to the log4j.properties file in your classpath.

Hope this will help you 🙂