Java Pub House (general)


Big shout-out to everyone I met at JavaOne (including some avid podcast listeners!). Thanks for listening and for a great time down at JavaOne! Don't worry, we will be sharing all the stuff I learned on new episodes of the podcast.

It is also our Birthday (We have been airing episodes for a year!)! Happy to celebrate with everyone a year of the podcast (and if you want to celebrate it, treat me a beer! :) ).

With this episode we wrap the concept of generics and bounds (super / extends) and talk about type erasure (and compiler warnings that goes 'Hm, dunno what you're doing but I can't make sure it's right'

And, that...is that!

If you just joined us, remember to follow me on Twitter! (@fguime)

and IF you like what you hear, treat me a beer!

Beer of the Episode: Still hung-over from JavaOne's big concert (Go Pearl Jam!)


Tweet, Tweet! (https://twitter.com/#!/fguime)
Oracle Java Generics (what we're following on this podcast) http://docs.oracle.com/javase/tutorial/java/generics/
Dr Venkat presentation on Generics (Click on the "Media" at the right side for the presentation, a great presentation
Agile Developer (Dr Venkat's Must-check website and blog
Angelika Langer FAQ on Generics

Vote for us in iTunes (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Questions, feedback or comments! comments@javapubhouse.com

Subscribe to our podcast! (http://javapubhouse.libsyn.com/rss)
ITunes link (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Java 7 Recipes book! (http://www.amazon.com/gp/product/1430240563/ref=as_li_ss_il?ie=UTF8&tag=meq-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1430240563)
Hey! if you like what you hear, treat me a beer! (It's the Java pub house after all :) https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Z8V2ZWV93UMW4

Direct download: JPHE31.mp3
Category:general -- posted at: 11:14pm CDT

Episode 30. I always thought Generics were as good as brand name Erasers (Java Generics part 1) ----
Hi there! Finally back on a (hopefully) standard schedule. I have been moving a house with three kids, two cats, one wife, one dog, and one grandma (they are heavy!, just kidding!) and just found the box with the podcast equipment! we hit the ground running with Generics. What are the benefits (and potential pitfalls) of Generics? Why do we even need them at all? The syntax looks pretty confusing, but with some Jedi Mind tricks one can actually start seeing how they work. If you use Generics (Almost everyone does :)) you should take a listen!

Ah! and if you are going to JavaOne check my t-shirt on the previous post

And if you just joined us, remember to follow me on Twitter! (@fguime)

Also, we are getting close to our first

BIRTHDAY!

If you have followed us all year long, or just recently join us, and like what you hear, treat me a beer!

Beer of the Episode: No beer, just coffee (it's hard to move a whole house



Tweet, Tweet! (https://twitter.com/#!/fguime)
Oracle Java Generics (what we're following on this podcast) http://docs.oracle.com/javase/tutorial/java/generics/

Vote for us in iTunes (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Questions, feedback or comments! comments@javapubhouse.com

Subscribe to our podcast! (http://javapubhouse.libsyn.com/rss)
ITunes link (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Java 7 Recipes book! (http://www.amazon.com/gp/product/1430240563/ref=as_li_ss_il?ie=UTF8&tag=meq-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1430240563)
Hey! if you like what you hear, treat me a beer! (It's the Java pub house after all :) https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Z8V2ZWV93UMW4


Direct download: JPHE30.mp3
Category:general -- posted at: 12:33pm CDT

We go and visit the Primordial Java Concepts. As rules set in stone we explore the concept of multiple inheritance, method and variable scope (including the final keyword), abstract methods and @override. This is good for those starting up their Mad Java SkillZ (We're L33T, u K|\|0w?), or for those who were always curious why the language is this way.

And if you like the podcast, subscribe to my Twitter Feed! http://www.twitter.com/fguime

Beer of the Episode: Leinenkugel's Sunset Wheat
|~|P |~|P |~|P |~|P |~|P |~|P |~|P Leinenkugel's Sunset Wheat
|_|  |_|  |_|  |_|  |_|  |_|  |_|

 

It's THE END OF SUMMER! If you like what you hear, DEFINITIVELY, treat me a beer ! :) (It's the Java pub house after all :) https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Z8V2ZWV93UMW4
|~|P |~|P |~|P |~|P |~|P |~|P |~|P Leinenkugel's Sunset Wheat
|_|  |_|  |_|  |_|  |_|  |_|  |_|

 

Tweet, Tweet!(https://twitter.com/#!/fguime)

Scopeshttp://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

Override annotationhttp://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why

Abstract Methods and Classeshttp://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

Vote for us in iTunes(http://itunes.apple.com/us/podcast/java-pub-house/id467641329)

Questions, feedback or comments! comments@javapubhouse.com

Subscribe to our podcast! (http://javapubhouse.libsyn.com/rss)
ITunes link (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Java 7 Recipes book!(http://www.amazon.com/gp/product/1430240563/ref=as_li_ss_il?ie=UTF8&tag=meq-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1430240563)

Hey! if you like what you hear, treat me a beer! (It's the Java pub house after all :) https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Z8V2ZWV93UMW4

Direct download: JPHE29.mp3
Category:general -- posted at: 10:11pm CDT

As developers, we have to deal with Exceptions every day (or at least every other day). In this episode we dive a bit on exception (and exception handling), plus we talk about certain behaviors that are not so well-understood (try returning from a finally block, or why exception stack traces sometimes misteriously disappears). A good review for those who already know, and a great primer for those diving into Exceptions, this episode is sure to show some surprises!

(~)P (~)P (~)P (~)P (~)P (Beer) (~)P (~)P (~)P (~)P

It's SUMMER! If you like what you hear, DEFINITIVELY, treat me a beer ! :) (It's the Java pub house after all :) https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Z8V2ZWV93UMW4

(~)P (~)P (~)P (~)P (~)P (Beer) (~)P (~)P (~)P (~)P

 

Tweet, Tweet! (https://twitter.com/#!/fguime) Try-with-resources constructhttp://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

Exception Definitionhttp://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html

Checked vs Unchecked Exceptions Debatehttp://www.ibm.com/developerworks/java/library/j-jtp05254/index.html

More Exception Debates from C vs C++, still a useful read. http://www.250bpm.com/blog:4

Vote for us in iTunes(http://itunes.apple.com/us/podcast/java-pub-house/id467641329)

Questions, feedback or comments! comments@javapubhouse.com

Subscribe to our podcast! (http://javapubhouse.libsyn.com/rss)
ITunes link (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Java 7 Recipes book!(http://www.amazon.com/gp/product/1430240563/ref=as_li_ss_il?ie=UTF8&tag=meq-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1430240563)

Hey! if you like what you hear, treat me a beer! (It's the Java pub house after all :) https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Z8V2ZWV93UMW4

Direct download: JPHE26.mp3
Category:general -- posted at: 11:06pm CDT

Episode 25. Reflection and vampire classes, and compiling Java from within Java.

We have heard the word "Reflection" thrown around, what does it mean? it is a new Twilight series? is it about Vampires? In all, we shed sunlight into what reflection is (and more importantly why in the world you want to use it). And also cover a technique to compile and load programs within your program. Javascript guys had access to this by doing eval("your program here"), and while Java doesn't have an eval function, there are ways of achieving similar results (and very specific reasons to do this crazy technique. Mostly performance)

 

It's SUMMER! If you like what you hear, DEFINITIVELY, treat me a beer ! :) (It's the Java pub house after all :) https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Z8V2ZWV93UMW4

 

Nimbus code to get the dang CacheMode (considered a private variable)

public class ButtonPainter extends AbstractRegionPainter {
    public ButtonPainter() {

        Class<?> c = null;
        PaintContext ctx = new PaintContext(new Insets(0,0,0,0), new Dimension(100,100), false, null, Double.POSITIVE_INFINITY, 2.0 );

        try {
            c = Class.forName("javax.swing.plaf.nimbus.AbstractRegionPainter$PaintContext$CacheMode");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        if (c != null) {
            Object cacheMode = c.getEnumConstants()[2];			// NINE_SQUARE_SCALE
            for (Field field : ctx.getClass().getDeclaredFields()) {
                if (c.getName().equals(field.getType().getName())) {        // if Field is the CacheMode
                    try {
                        // the following lines would not be necessary for example if
                        // AbstractRegionPainter.cacheMode were protected or public.

                        field.setAccessible(true);                          // make it accessible so that we can set it
                        field.set(ctx, cacheMode);                          // set the cachemode
                        // this is equivalent as sayin "ctx.cacheMode = CacheMode.NINE_SQUARE_SCALE" if it were public/protected
                        break;
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

    }

    @Override
    protected PaintContext getPaintContext() {
        return null;  //To change body of implemented methods use File | Settings | File Templates.
    }

    @Override
    protected void doPaint(Graphics2D g, JComponent c, int width, int height, Object[] extendedCacheKeys) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
}





Code to get instance from a source file

    public static Object getInstanceForSource(String className, String sourceForRule) {
        String filename = "tmp/" + className + ".java";
        File file = new File(filename);
        writeFile(filename, sourceForRule);				
        String classPath = System.getProperty("java.class.path");
        String[] args = new String[]{
                "-classpath", classPath,
                filename
        };


        StringWriter compilerOutput = new StringWriter();
        int status = com.sun.tools.javac.Main.compile(args,new PrintWriter(compilerOutput));
        additionalInfo.value = compilerOutput.toString();
        switch (status) {
            case 0:  // OK
                // Make the class file temporary as well
                File classFile = new File("./tmp/");
                try {
                    // Try to access the class and run its main method
                    URLClassLoader loader = new URLClassLoader(new URL[] {classFile.toURI().toURL()});
                    Class clazz = loader.loadClass(className);
                    return clazz.newInstance();
                } catch (Exception ex) {
                    additionalInfo.value = "Exception in main: " + Utilities.exceptionToString(ex)+"\n"+additionalInfo.value;
                }
                break;
            case 1:
                System.out.println ("Status: Error" +"\n"+additionalInfo.value);
                break;
            case 2:
                System.out.println ("Status: CMDERR" +"\n"+additionalInfo.value);
                break;
            case 3:
                System.out.println ("Status: SYSERR" +"\n"+additionalInfo.value);
                break;
            case 4:
                System.out.println ("Status: ABNORMAL" +"\n"+additionalInfo.value);
                break;
            default:
                System.out.println ("Status: UNKNOWN" +"\n"+additionalInfo.value);
                break;
        }
        return null;
    }

    public static void writeFile(String fileName, String content) {
        Writer writer;
        File file = new File(fileName);
        try {
            writer = new BufferedWriter(new FileWriter(file));
            writer.write(content);
            writer.close();
        } catch (IOException e) {
           System.out.println ("I/O exception "+e);
        }
    }


Tweet, Tweet!(https://twitter.com/#!/fguime)

Reflection 'trail' http://docs.oracle.com/javase/tutorial/reflect/index.html
Create dynamic applications with javax.tools http://www.ibm.com/developerworks/java/library/j-jcomp/index.html
URLClassLoaders (loads .class files generatedhttp://docs.oracle.com/javase/6/docs/api/java/net/URLClassLoader.html

Vote for us in iTunes(http://itunes.apple.com/us/podcast/java-pub-house/id467641329)

Questions, feedback or comments! comments@javapubhouse.com

Subscribe to our podcast! (http://javapubhouse.libsyn.com/rss)
ITunes link (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Java 7 Recipes book!(http://www.amazon.com/gp/product/1430240563/ref=as_li_ss_il?ie=UTF8&tag=meq-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1430240563)

Hey! if you like what you hear, treat me a beer! (It's the Java pub house after all :) https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Z8V2ZWV93UMW4

Direct download: JPHE25.mp3
Category:general -- posted at: 11:01pm CDT

In this podcast we turn and talk of that embarassing uncle that every API has (java.util.date), you know, the one that you have to live with because is family, but don't really like that much? We dive into what to avoid when using Date (and Calendar), and the most common pitfalls that we have falled for (1000*60*60*24 anyone?). In all, if you have used date extensively you probably already migrated to JodaTime, but if you are a casual user, then take a listen, just to make sure you are not bitten by the Date traps!

Vote for us in iTunes (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Follow us in Twitter!https://twitter.com/#!/fguime

http://joda-time.sourceforge.net/ (Joda Time)
http://www.wolkje.net/2010/01/06/java-date-and-time-api-and-jsr-310/(New Date JSR + what goes under the covers)

Questions, feedback or comments! comments@javapubhouse.com

Subscribe to our podcast! (http://javapubhouse.libsyn.com/rss)
ITunes link (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Java 7 Recipes book! (http://www.amazon.com/gp/product/1430240563/ref=as_li_ss_il?ie=UTF8&tag=meq-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1430240563)

Direct download: JPHE20.mp3
Category:general -- posted at: 8:19pm CDT

We finish our discussion on the ObjectOutputStream by covering the SerialVersionUID, and then move onto ObjectOutputStream's citadine cousin, XMLEncoder and Decoder (and why would you go and hang out with it). We also make a quick introduction to "The Bean" (Java Beans that is), and discover there isn't too much to it. If you are persisting and/or transmitting, listen to the shocking conclusion (gasp!) of serialization!

Rate us in  iTunes (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Follow us in Twitter! https://twitter.com/#!/fguime

http://java.sun.com/developer/technicalArticles/Programming/serialization/ (Serialization/Deserialization)
http://docs.oracle.com/javase/1.5.0/docs/guide/serialization/spec/version.html#6678 (Compatible/Incompatible serialization changes)
http://java.sun.com/products/jfc/tsc/articles/persistence4/(XMLEncoder/Decoder)

Questions, feedback or comments! comments@javapubhouse.com

Subscribe to our podcast! (http://javapubhouse.libsyn.com/rss)
ITunes link (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Java 7 Recipes book! (http://www.amazon.com/gp/product/1430240563/ref=as_li_ss_il?ie=UTF8&tag=meq-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1430240563)

Direct download: JPHE19.mp3
Category:general -- posted at: 10:52pm CDT

We all have the need to serialize/deserialize objects (either through the "wire" or to file). In this podcast we go and analyze what exactly happens when we create an ObjectOutputStream and write to it, and more importantly what pitfalls are there to avoid (Out ot memory errors, stale object updates, Not Serializable Exceptions, and toenail fungus!). If you ever considered using ObjectOutput/InputStream, or are actively using in your current projects, take a listen!

https://github.com/eishay/jvm-serializers/wiki/ (Serialization performance comparison for Java, pick one!)

Questions, feedback or comments! comments@javapubhouse.com

Subscribe to our podcast! (http://javapubhouse.libsyn.com/rss)
ITunes link (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Java 7 Recipes book! (http://www.amazon.com/gp/product/1430240563/ref=as_li_ss_il?ie=UTF8&tag=meq-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1430240563)

Direct download: JPHE18.mp3
Category:general -- posted at: 8:04pm CDT

In this episode we go over Aspects (and AspectJ), what really is, and when to use them. It turns out, that there is nothing misterious about them! We also cover how to set-up Aspects for J2SE so you can start using them immediately!

Questions, feedback or comments! comments@javapubhouse.com

VM Parameter
-javaagent:dep/aspectjweaver.jar

Example Aspect

@Aspect

public class OrderAspect {

@Before("execution(* *.*(Order))") // must qualify
public void anyCall() {
System.out.println("Was called from anywhere");
}
}

Example aop.xml file

          <aspectj>
<aspects>
<aspect name="OrderAspect"/>
</aspects>
<weaver options="-verbose -showWeaveInfo">
</weaver>
</aspectj>

Example Folder Structure

src
|
|-META-INF
|
|-aop.xml

References:

http://www.eclipse.org/aspectj/doc/released/adk15notebook/ataspectj-pcadvice.html

http://www.eclipse.org/aspectj/doc/next/quick5.pdf

http://blog.espenberntsen.net/2010/03/20/aspectj-cheat-sheet/

(Using aspects with annotations)
http://stackoverflow.com/questions/2011089/aspectj-pointcut-for-all-methods-of-a-class-with-specific-annotation

Direct download: JPHE8.mp3
Category:general -- posted at: 3:00pm CDT

In this episode of Java pub house, we talk about Deadlocks, livelocks (and other spooky things). Most importantly we talk on how to spot them (using jstack, or visualvm), and how to program defensively against them. We also talk about escaped locks (the source of most deadlocks), and the wait/notify language construct. Finally we describe the unfairness of the lock (locks are not "fair" by default), and why is it so.

Direct download: JPHE2.mp3
Category:general -- posted at: 12:04pm CDT