If you have ever called Thread.sleep and cursed about having to now deal with the InterruptedException, you should read this!
http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html
Showing posts with label java. Show all posts
Showing posts with label java. Show all posts
Tuesday, July 23, 2013
Friday, November 9, 2012
Java tip: How to list and find threads and thread groups
Found a fantastic post on finding threads and thread groups
http://nadeausoftware.com/articles/2008/04/java_tip_how_list_and_find_threads_and_thread_groups
http://nadeausoftware.com/articles/2008/04/java_tip_how_list_and_find_threads_and_thread_groups
Friday, June 10, 2011
ResourceBundles and special characters
Seems that some special characters when used in a ResourceBundle proper file will throw off the parser for substitution. These characters need to be escaped properly, the escape notation is as follows:
See also:
The special chars \', { and }:
| escape ' with another ' | '' | (double-single quote) |
| escape \ with another \ | \\ | (double backslash) |
| enclose } with ' | '}' | |
| enclose { with ' | '{' |
See also:
Tuesday, May 24, 2011
Thursday, May 5, 2011
Steps to add ssl cert to JVM
Found a great link for adding certs to java for windows, Mac, and linux.
http://eclipse.open.collab.net/servlets/ProjectProcess?pageID=3450
http://eclipse.open.collab.net/servlets/ProjectProcess?pageID=3450
Thursday, April 7, 2011
Ignoring Certs for Testing
Had an issue while using XFire (legacy version of CXF), where I needed to access a website using ssl but that had a self-signed cert. The Protocol constructor is depreciated, but for testing purposes works fine.
EasySSLProtocolSocketFactory basically uses a "null" implementation of a X509TrustManager.
See Also:
http://stackoverflow.com/questions/2301548/calling-axis2-web-service-from-xfire-client-the-endpoint-reference-epr-for-the
Example
//protocol=https, etc
protected static void ignoreCertsFor(String protocol, int port){
Protocol.registerProtocol(protocol, new Protocol(protocol, new EasySSLProtocolSocketFactory(), port));
}
protected static void ignoreCertsFor(String protocol, int port){
Protocol.registerProtocol(protocol, new Protocol(protocol, new EasySSLProtocolSocketFactory(), port));
}
EasySSLProtocolSocketFactory basically uses a "null" implementation of a X509TrustManager.
"null" X509TrustManager Example
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
See Also:
http://stackoverflow.com/questions/2301548/calling-axis2-web-service-from-xfire-client-the-endpoint-reference-epr-for-the
Sunday, March 27, 2011
Sample Java usage for MongoDB
Maven
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.5</version>
</dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.5</version>
</dependency>
Connect to Mongo
import com.mongodb.DB;
import com.mongodb.Mongo;
//...
Mongo mongo = new Mongo(host, 27017);
DB db = mongo.getDB("name of db"); //If db does not exist, then it will be created.
import com.mongodb.Mongo;
//...
Mongo mongo = new Mongo(host, 27017);
DB db = mongo.getDB("name of db"); //If db does not exist, then it will be created.
Insert JSON Data
import com.mongodb.BasicDBObject;
import com.mongodb.DBCollection;
//...
DBCollection coll = db.getCollection("testCollection"); //If collection does not exist, then it will be created.
BasicDBObject doc = new BasicDBObject();
doc.put("hello", "world");
BasicDBObject inner = new BasicDBObject();
inner.put("key","value");
doc.put("inner", inner);
coll.insert(doc);
import com.mongodb.DBCollection;
//...
DBCollection coll = db.getCollection("testCollection"); //If collection does not exist, then it will be created.
BasicDBObject doc = new BasicDBObject();
doc.put("hello", "world");
BasicDBObject inner = new BasicDBObject();
inner.put("key","value");
doc.put("inner", inner);
coll.insert(doc);
Fetch JSON Data
import com.mongodb.BasicDBObject;
import com.mongodb.DBCollection
import com.mongodb.DBCursor;
//...
DBCollection coll = db.getCollection("testCollection");
BasicDBObject query = new BasicDBObject();
query.put("hello", "world");
DBCursor cursor = coll.find(query);
while(cursor.hasNext()) {
System.out.println(cursor.next());
}
import com.mongodb.DBCollection
import com.mongodb.DBCursor;
//...
DBCollection coll = db.getCollection("testCollection");
BasicDBObject query = new BasicDBObject();
query.put("hello", "world");
DBCursor cursor = coll.find(query);
while(cursor.hasNext()) {
System.out.println(cursor.next());
}
GridFS
import com.mongodb.gridfs.GridFS;
//...
GridFS fs = new GridFS(db, "collection"); //If bucket does not exist, it will be created.
//...
GridFS fs = new GridFS(db, "collection"); //If bucket does not exist, it will be created.
GridFS Save File
import java.io.File;
import com.mongodb.gridfs.GridFSInputFile;
//...
GridFSInputFile file = fs.createFile(new File("/path/to/file.ext"));
file.save();
import com.mongodb.gridfs.GridFSInputFile;
//...
GridFSInputFile file = fs.createFile(new File("/path/to/file.ext"));
file.save();
GridFS List Files
import com.mongodb.DBCursor;
//...
DBCursor cursor = fs.getFileList();
while(cursor.hasNext()) {
System.out.println(cursor.next());
}
//...
DBCursor cursor = fs.getFileList();
while(cursor.hasNext()) {
System.out.println(cursor.next());
}
GridFS Read File
GridFSDBFile file = fs.findOne("file.ext");
BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream()));
String line = null;
while((line = reader.readLine()) != null){
System.out.println(line);
}
BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream()));
String line = null;
while((line = reader.readLine()) != null){
System.out.println(line);
}
Map/Reduce
Example Dataset:
{ "_id" : ObjectId("4d8233d6d638a2ca105b1fab"), "name" : "John", "number" : 2 }
{ "_id" : ObjectId("4d8233d6d638a2ca105b1fac"), "name" : "Jane", "number" : 2 }
{ "_id" : ObjectId("4d8233dbd638e40a183d27f8"), "name" : "John", "number" : 2 }
{ "_id" : ObjectId("4d8233dcd638e40a183d27f9"), "name" : "Jane", "number" : 2 }
Code Example:
import com.mongodb.MapReduceCommand;
import com.mongodb.MapReduceOutput;
//...
String map = "function(){" +
"emit(this.name, {count: 1, sum: this.number});" +
"};";
String reduce = "function( key , values ){" +
"var n = { count: 0, sum: 0}; " +
"for ( var i = 0; i < values.length; i ++ ) {" +
"n.sum += values[i].sum;" +
"n.count += values[i].count;" +
"};" +
"return n;" +
"};";
MapReduceOutput out = coll.mapReduce(map, reduce, null, MapReduceCommand.OutputType.INLINE, null);
for ( DBObject obj : out.results() ) {
System.out.println( obj );
}
Expected Output:
{ "_id" : "Jane" , "value" : { "count" : 2.0 , "sum" : 4.0}}
{ "_id" : "John" , "value" : { "count" : 2.0 , "sum" : 4.0}}
{ "_id" : ObjectId("4d8233d6d638a2ca105b1fab"), "name" : "John", "number" : 2 }
{ "_id" : ObjectId("4d8233d6d638a2ca105b1fac"), "name" : "Jane", "number" : 2 }
{ "_id" : ObjectId("4d8233dbd638e40a183d27f8"), "name" : "John", "number" : 2 }
{ "_id" : ObjectId("4d8233dcd638e40a183d27f9"), "name" : "Jane", "number" : 2 }
Code Example:
import com.mongodb.MapReduceCommand;
import com.mongodb.MapReduceOutput;
//...
String map = "function(){" +
"emit(this.name, {count: 1, sum: this.number});" +
"};";
String reduce = "function( key , values ){" +
"var n = { count: 0, sum: 0}; " +
"for ( var i = 0; i < values.length; i ++ ) {" +
"n.sum += values[i].sum;" +
"n.count += values[i].count;" +
"};" +
"return n;" +
"};";
MapReduceOutput out = coll.mapReduce(map, reduce, null, MapReduceCommand.OutputType.INLINE, null);
for ( DBObject obj : out.results() ) {
System.out.println( obj );
}
Expected Output:
{ "_id" : "Jane" , "value" : { "count" : 2.0 , "sum" : 4.0}}
{ "_id" : "John" , "value" : { "count" : 2.0 , "sum" : 4.0}}
Saturday, March 26, 2011
How to build a basic Pax-Runner application with Maven that utilizes spring-dm
My goal is to create a Maven based solution that can automatically assemble a pax-runner driven application that is ready to be deployed.
To make this work with a larger application, there should be an outer pom that includes this and any other bundles as modules. This should be the last module processed, the assembly process will pick up on the other modules built at the same time.
Directory Structure:
- pom.xml
- src
- main
- etc
- assembly
- paxrunner-assembly.xml
- scripts
- run.bat - for windows
- run.sh - for *nix
- assembly
- etc
- main
To start I created a Maven pom file that has pax-runner as a dependency and references a custom assembly file.
pom.xml
<dependencies>
<dependency>
<groupId>org.ops4j.pax.runner</groupId>
<artifactId>pax-runner</artifactId>
<version>${pax-runner.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>create-target</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/etc/assembly/paxrunner-assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependency>
<groupId>org.ops4j.pax.runner</groupId>
<artifactId>pax-runner</artifactId>
<version>${pax-runner.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>create-target</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/etc/assembly/paxrunner-assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
The assembly file will tell Maven how to package the final output. The xml is fairly easy to read, see the maven-assembly-plugin documentation for specifics. The one thing worth calling out is the exclusion of the spring and related libraries, this is because pax-runner already has a built in profile that will download and wire them up properly.
paxrunner-assembly.xml
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>distribution</id>
<formats>
<format>dir</format>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<files>
<file>
<source>src/main/etc/scripts/run.sh</source>
<fileMode>0777</fileMode>
</file>
<file>
<source>src/main/etc/scripts/run.bat</source>
<fileMode>0777</fileMode>
</file>
</files>
<moduleSets>
<moduleSet>
<binaries>
<unpack>false</unpack>
<includeDependencies>true</includeDependencies>
<outputDirectory>lib/module-bundles</outputDirectory>
<dependencySets>
<!-- 3rd party libraries -->
<dependencySet>
<outputDirectory>lib/required-bundles</outputDirectory>
<excludes>
<exclude>org.springframework:org.springframework.core</exclude>
<exclude>org.springframework:org.springframework.aop</exclude>
<exclude>org.springframework:org.springframework.asm</exclude>
<exclude>org.springframework:org.springframework.beans</exclude>
<exclude>org.springframework:org.springframework.context</exclude>
<exclude>org.springframework:org.springframework.context.support</exclude>
<exclude>org.springframework:org.springframework.expression</exclude>
<exclude>org.slf4j:*</exclude>
<exclude>org.aopalliance:*</exclude>
<exclude>org.apache.commons:*.logging</exclude>
</excludes>
</dependencySet>
</dependencySets>
</binaries>
</moduleSet>
</moduleSets>
<dependencySets>
<!-- Adds pax-runner to root of distribution -->
<dependencySet>
<scope>provided</scope>
<includes>
<include>org.ops4j.pax.runner:pax-runner</include>
</includes>
<outputFileNameMapping>${artifact.artifactId}.${artifact.extension}</outputFileNameMapping>
</dependencySet>
</dependencySets>
</assembly>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>distribution</id>
<formats>
<format>dir</format>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<files>
<file>
<source>src/main/etc/scripts/run.sh</source>
<fileMode>0777</fileMode>
</file>
<file>
<source>src/main/etc/scripts/run.bat</source>
<fileMode>0777</fileMode>
</file>
</files>
<moduleSets>
<moduleSet>
<binaries>
<unpack>false</unpack>
<includeDependencies>true</includeDependencies>
<outputDirectory>lib/module-bundles</outputDirectory>
<dependencySets>
<!-- 3rd party libraries -->
<dependencySet>
<outputDirectory>lib/required-bundles</outputDirectory>
<excludes>
<exclude>org.springframework:org.springframework.core</exclude>
<exclude>org.springframework:org.springframework.aop</exclude>
<exclude>org.springframework:org.springframework.asm</exclude>
<exclude>org.springframework:org.springframework.beans</exclude>
<exclude>org.springframework:org.springframework.context</exclude>
<exclude>org.springframework:org.springframework.context.support</exclude>
<exclude>org.springframework:org.springframework.expression</exclude>
<exclude>org.slf4j:*</exclude>
<exclude>org.aopalliance:*</exclude>
<exclude>org.apache.commons:*.logging</exclude>
</excludes>
</dependencySet>
</dependencySets>
</binaries>
</moduleSet>
</moduleSets>
<dependencySets>
<!-- Adds pax-runner to root of distribution -->
<dependencySet>
<scope>provided</scope>
<includes>
<include>org.ops4j.pax.runner:pax-runner</include>
</includes>
<outputFileNameMapping>${artifact.artifactId}.${artifact.extension}</outputFileNameMapping>
</dependencySet>
</dependencySets>
</assembly>
Finally for the scripts, these do nothing more than start up pax-runner and pass in any directories of bundles or configuration files.
run.sh
java -jar pax-runner.jar --profiles=spring.dm --workingDirectory=. scan-dir:lib/required-bundles scan-dir:lib/module-bundles
run.bat
@echo off
call java -jar pax-runner.jar --profiles=spring.dm --workingDirectory=. scan-dir:lib/required-bundles scan-dir:lib/module-bundles %1 %2 %3
call java -jar pax-runner.jar --profiles=spring.dm --workingDirectory=. scan-dir:lib/required-bundles scan-dir:lib/module-bundles %1 %2 %3
Subscribe to:
Posts (Atom)