Joburg GDG BarCamp – 11 May

The Johannesburg Google Developer Groups BarCamp is on this Saturday from 09:30 at the Jozi Hub in 44 Stanley Avenue, Milpark.

These kind of events are a great networking, learning and teaching opportunity with something for everyone. So if you’re interested in any Google related technology, this is the place to be.

We are planning a GDG BarCamp for the 11th May 2013. There will be talks in the morning but most of the day will be set aside for lightning talks in an un-conference format.

Topics to be covered

  • Android development
  • Google APIs
  • PhoneGap
  • Building back-end services with Drupal

For more details and to RSVP checkout the Meetup page.

 

Africa GDG

Africa GDG

Posted in Event | Tagged , , , | Leave a comment

WebMethods Throws NullPointerException When Calling Flow Service In Debug Mode

When debugging a flow service, on calling another flow service an error dialog popped up stating a null pointer exception had occurred. No other information was displayed. On dismissing the dialog, the debugging session terminated.

This did not occur when running the same flow service, nor did it occur on all flow service calls.

While trying to debug the problem, I selected ‘Validate Input’ on the flow service being called, then saved the service. The call to the flow service ceased throwing the error. I then deselected ‘Validate Input’, and saved the file. The error did not come back.

I’m still trying to figure out what caused the issue, but if you experience the problem, try editing the flow service and saving it.

Posted in Programming | Tagged , | 1 Comment

May Jozi JUG – The Google Guava Libraries

If you’re in the Joburg area and are interested in Java, head over to the May Jozi JUG session on 27 May:

Mohamed Akoojee will be discussing various aspects of Google guava libraries and going through some code, working through examples.
He won’t be able to go through the entire API, but I hopes to cover the String utilities, Collections, IO, event bus and depending on time, concurrency.

https://code.google.com/p/guava-libraries/

Agenda:
18:00 – 19:00 Networking and supper
19:00 – 20:00 Presentation
20:00 onward Networking

Guruhut is sponsoring the food while Oracle is providing the venue.

Posted in IT, Programming | Tagged , , , | Leave a comment

No Content To Map To Object Due To End Of Input

If you’re using Jersey JAX-RS and get the error “No content to map to Object due to end of input” when your service is called, it may be because you’re attempting to pass in a JSON object while using a GET request.

If you’re using the @GET annotation on your service method, you cannot consume JSON and have it marshalled into an object. Either you need to change your method to use @POST, or use @QueryParam or @PathParam in conjunction with @GET.

java.io.EOFException: No content to map to Object due to end of input
	at org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2766)
	at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2682)
	at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1308)
	at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419)
	at com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:488)
	at com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123)
	at com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:46)
	at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153)
	at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:183)
	at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
	at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1480)
	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1411)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1360)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1350)
	at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at anon.doFilter(OAuthFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:931)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Posted in Programming | Tagged , , , , , | 6 Comments

Single jQuery Ajax Call Results In Two Requests

I implemented simple performance monitoring for a JavaScript/Java application I’m building. This involved writing a Servlet Filter that calls Java Simon code. The Java Simon console application was recording two entries for every single Ajax request that was being made. It turned out the jQuery library was making two calls.

Double Ajax Request

Double Ajax Request

If you find that for every Ajax request made through the jQuery library you’re seeing two requests, it may be because you’re using CORS (Cross-Origin Resource Sharing). This is where your JavaScript makes an Ajax request to a server it was not loaded from.

In order to make a CORS call, jQuery makes a ‘preflight’ request:

Depending on the complexity of the cross-origin request, the client (browser) may make an initial request – known as a “preflight” request – to the server to gather authorization information. This preflight request can be cached by the client and is therefore not needed for subsequent CORS requests. – Ben Nadel

This results in two calls being made to the same URL. As I was recording data for performance monitoring I didn’t want the preflight requests to be included. There is no way to use the web.xml filter URL pattern to restrict by the HTTP method, so this had to be done in the Servlet Filter itself. (below) The preflight request uses the OPTIONS method, so I simply filtered on method.

//Absolutely not production quality code...
Split split = null;
try {
    if (request instanceof HttpServletRequest) {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
 
        if (httpRequest.getMethod().equalsIgnoreCase("POST")) {
            String path = httpRequest.getPathInfo().replaceAll("/", ".");
 
            Stopwatch stopwatch = SimonManager.getStopwatch("servlet" + path);
            split = stopwatch.start();
        }
    }
 
    chain.doFilter(request, response);
} finally {
    if (split != null) {
        split.stop();
    }
}

 

Posted in Programming | Tagged , , , , | Leave a comment

June 2012 Gauteng User Group Events

Jozi JUG - Why Functinoal Programming Matters

Jozi JUG - Why Functinoal Programming Matters

Jozi JUG -Why Functional Programming Matters

Event website

Monday, June 25, 2012
Internet Solutions, The Chill Room, The Campus, Sloane Street, Bryanston

Andreas Pauley will be giving us an introduction to functional programming: what it is in essence, how it differs from object-oriented programming and what the benefits are.

Andreas founded a functional programming user group called Lambda Luminaries. (http://www.meetup.com/lambda-luminaries/) His development background is in Python and Smalltalk. He is currently working as an Erlang developer.

Time: 25/06/2012 17:30 for 18:00
Location: Chillroom – Internet Solutions – Le Mans Building – The Campus – Cnr Sloane and Main
Agenda:
17:30 – 18:30 Drinks and pizza 🙂
18:30 – 19:30 Presentation
19:30 onward networking and more drinks…

 

Lambda Luminaries - Datatype Generic Programming in Haskell

Lambda Luminaries - Datatype Generic Programming in Haskell

Lambda Luminaries – Datatype Generic Programming in Haskell

Event website

Thursday, June 21, 2012

4 Burger Ave, Lyttelton Manor

We are very happy to announce our first international speaker at Lambda Luminaries!

Sean Leather from the Dutch Haskell User Group and Utrecht University will be talking to us.

Sean is going to broaden our programming horizons with an introduction to datatype-generic programming in Haskell.

He promised some brain-frying (because that is why we’re into Haskell, right?), but not too much.

Have a look at the course page where Sean has taught this for more information:

http://www.cs.uu.nl/wiki/GP

Hope to see you all there!

Posted in IT | Tagged , , , | Leave a comment

Glassfish 3: Space In Custom Resource Name Causes Error

I mistakenly added a custom JNDI resource in Glassfish through the administration console with a space in the name. It was ‘application_configuration /download-token’. The space caused an error when the JNDI>Custom Resource page loaded:

REST Request ‘http://localhost:4848/management/domain/servers/server/server/resource-ref/application_configuration+%2Fdownload-token’ failed with response code ‘404’.

Glassfish JNDI Custom Resource Error

Glassfish JNDI Custom Resource Error

Thereby failing to show any entries or allow for correction. As far as I can tell the only way to correct the entry is to remove it via asadmin:

delete-custom-resource ‘application_configuration /download-token’

Delete Custom JNDI Resource

Delete Custom JNDI Resource

Posted in Programming | Tagged , , , , | Leave a comment

Cassandra Repository Analyser For Siebel

Tetrad IT has released a new product! The Cassandra Repository Analyser. From the website:

Cassandra is a fully automated repository analyser for Siebel. It analyses a Siebel repository for best practice violations in configuration and eScript that lead to performance problems, memory leaks, maintenance difficulties and data integrity issues. The goal of the tool is to measure the quality of development produced.

The best practices inspected for are a subset of the Oracle Configuration Review and Software Engineering best practices.

Instead of waiting for a once a year (or worse!) manual review to be done, developers, team leads and architects can now review their Siebel eScript and configuration as often as they like. They can even set up the tool to email them daily, weekly or monthly reports.

Cassandra is available as both a client and server application. The client application is based on the NetBeans Platform, an awesome Java thick client framework. This is installed locally and normally used for ad hoc developer specific reports.

The server component is a Jenkins plugin making it easy to get up and running with, and giving you all the goodness of the Jenkins product and plugin ecosystem. This allows you to use Jenkins’ powerful scheduling and notification functionality.

If you’re interested in finding out more, check out the product webpage.

Cassandra has been featured on the NetBeans Platform Showcase:

Cassandra Repository Analyser

Cassandra Repository Analyser

Posted in IT, Programming | Tagged , , , , , , , | 1 Comment

Hibernate 4.0.1 Final and Jenkins 1.449 java.lang.NoSuchFieldError: TRACE

Using Hibernate 4.0.1 Final within a Jenkins plugin causes the error below. This is because Jenkins ships with log4j 1.2.9 and Hibernate requires 1.2.16

Replace the old jar with the new in {jenkins_home}/WEB-INF/lib and Hibernate will work.

java.lang.NoSuchFieldError: TRACE
	at org.jboss.logging.Log4jLogger.translate(Log4jLogger.java:64)
	at org.jboss.logging.Log4jLogger.doLog(Log4jLogger.java:44)
	at org.jboss.logging.Logger.trace(Logger.java:128)
	at org.hibernate.ejb.internal.EntityManagerMessageLogger_$logger.trace(EntityManagerMessageLogger_$logger.java:422)
	at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:322)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:55)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
	...
        Your classes
        ...
	at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
	at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:700)
	at hudson.model.Build$RunnerImpl.build(Build.java:178)
	at hudson.model.Build$RunnerImpl.doRun(Build.java:139)
	at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:470)
	at hudson.model.Run.run(Run.java:1404)
	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
	at hudson.model.ResourceController.execute(ResourceController.java:88)
	at hudson.model.Executor.run(Executor.java:238)
Posted in Programming | Tagged , , | 1 Comment

The INSERT permission was denied on the object ‘X’, database ‘Y’, schema ‘Y’.

Can be caused by overzealous addition of permissions. Make sure the Role Members ‘db_denydatawriter’ and ‘deny_datareader’ are unchecked.

MSSQL User Permissions

Posted in Programming | Tagged | 2 Comments