apache commons - don\'t re-invent the wheel

Post on 14-May-2015

2.377 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Introduction to Apache Commons presented at ApacheCon US 2008

TRANSCRIPT

Apache Commons

don’t re-invent the wheel

Torsten Curdt

Why are you aDeveloper?

Creating & Building

That is a problem!

The journeyis the goal.

Use vs Build

A Story of Re-use

•Faster

•Better designed

•Less time

•Smaller team

Original

Re-Impl

0 5,000 10,000 15,000 20,000 25,000

hours

20,000 hours

7x

5x

How did we do it?

Re-use to Excel

Know your libraries!

Heritage

Charter

“ C r e a t i o n o f s m a l l r e - u s eab l e components that can be used across projects. They are supposed to have as few dependencies as possible, meant to be well tested and compatible with the current de-facto standard version of the JDK”

Growth

Sandbox

Proper Dormant

Project Stats

0

15

30

45

60

Active Inactive

37

37

18

SandboxProperDormant

Proper

Collections

Map map = new CaseInsensitiveMap();map.put("One", "One");map.get("ONE");

Map colorMap = MapUtils.toMap(new String[][] {{ {"red", "#FF0000"}, {"green", "#00FF00"}, {"blue", "#0000FF"}});

Primitives

ArrayByteList list = new ArrayByteList();

list.add(byte);list.removeElementAt(index);

byte[] bytes = list.toArray();

IO

InputStream in;OutputStream out;

IOUtils.copy(in, out);

...

byte[] data = IOUtils.toByteArray(in);

Lang

String s = “Apache Jakarta Commons”;StringUtils.right(s, 7); // “Commons”

String n = “0”;StringUtils.leftPad(s, 4, ‘0’); // “0000”

Logging

public class C { private Log log = LogFactory.getLog(C.class); ... if (log.isDebugEnabled()) { log.debug("log message"); }

CLI

Options options = new Options();options.addOption("h", false, "display usage");

CommandLine line = parser.parse(options, args);

if(line.hasOption("h")) { HelpFormatter f = new HelpFormatter(); f.printHelp("myprogram", options); ...

Email

SimpleEmail email = new SimpleEmail();email.setHostName("mail.myserver.com");email.addTo("jdoe@somewhere.org", "John Doe");email.setFrom("me@apache.org", "Me");email.setSubject("Test message");email.setMsg("A simple test of commons-email");email.send();

Net

NNTPClient client = new NNTPClient();client.connect("news.server.net");

NewsgroupInfo[] = client.listNewsgroups();

client.disconnect();

JXPath

XPathContext context = JXPathContext.newContext(dom);

String value = (String) context.getValue("/my/xpath/to/value");

VFS

FileSystemManager fs = VFS.getManager();FileObject jar = fs.resolveFile( "jar:lib/aJarFile.jar" );

FileObject[] childs = jar.getChildren();for (int i=0; i < childs.length; i++ ) { ...

JCI

JavaCompiler compiler = new EclipseJavaCompiler();ResourceStore store = new MemoryResourceStore();

CompilationResult result = compiler.compile( new String[] { "org/MyClass.java" }, new FileResourceReader(directory), store );

Exec

OutputStream out;OutputStream error;

CommandLine cl = new CommandLineImpl();cl.setExecutable("path/to/exe");cl.addArgument("arg");exec.execute(cl, out, error);

Proxy

o = (MyObject) new CglibProxyFactory() .createInterceptorProxy( new MyObjectImpl(), new LoggingInterceptor(log), new Class[]{ MyObject.class });o.test(”test”);

[DEBUG] - BEGIN test(test)[DEBUG] - END test()

Overviewattributes, beanutils, betwixt, chain, cli, codec, collections, configuration, daemon, dbcp, dbutils, digester, discovery, el, email, fileupload, httpclient, io, jci, jelly, jexl, jxpath, lang, launcher, logging, math, modeler, net, pool, primitives, proxy, scxml, transaction, validator, vfs

Sandbox

CSV

String[][] data = CSVParser.parse(string);

CSVParser parser = new CSVParser(reader,’;’);String[][] data = parser.getAllValues();

Javaflow

class MyRunnable implements Runnable { public void run() { for(int i=0; i<10; i++ ) Continuation.suspend(); }}Continuation c = Continuation.startWith( new MyRunnable());Continuation d = Continuation.continueWith(c);...

OpenPGP

keyRing = new BouncyCastleKeyRing( secret, public, password);signer = new BouncyCastleOpenPgpSigner();signer.detachedSign( fileInputStream signatureOutputStream, keyId, keyRing, true );

Overview

compress, csv, expression, finder, flatfile, functor, i18n, id, javaflow, jnet, js2j, me, monitoring, nabla, openpgp, p e r f o r m a n c e , p i p e l i n e , validator2

Dormant

Overviewbenchmark, cache, clazz, codec-mulipart, combo, contract, events, feedparser, filters, functor, grant, graph2, http, jex, jjar, jpath, jrcs, jux, latka, mapper, messenger, pattern, periodicity, reflect, resources, rupert, s c a f f o l d , s e r v i c e s , s e r v l e t , simplestore, tbm, test, threading, threadpool, workflow, xmlio, xmlunit, xo

80%

20%

direct dependencyno dependency

We need you!

dev@commons.apache.org

Thanks!

http://vafer.org/bloghttp://twitter.com/tcurdt

top related