čtvrtek 23. října 2014

jOpenSpace 2014

The best pure Czech not-only-Java conference jOpenSpace is over for this year and I'd like to write few words about it.

First of all, big thanks goes to Honza @novoj Novotný as the main organizer. This awesome event under his supervision become not only interesting from the technical PoV, but also very socializing (We were a nice Java family).

Next thanks goes to all sponsors, who made jOpenSpace comfortable and cheap as a hell:
  • Red Hat
  • Vendavo
  • MoroSystems
  • FG Forrest
  • Kerio
  • ABRA FlexiBee

Friday

We started the conference with a free day! The main program for Friday was a trip to Slovakia - to climb the Velka Javorina. Rainy weather was very demanding. Nevertheless, no one gave up! Hotel sauna was a nice end of a day and it was already fulfilled with interesting Java topics.

Saturday

Few of us started the day with a nice 9km run. The weather was beautiful and hills around colorful. First lightning talks started after the breakfast and continued during whole day. Hands-on labs started later in the afternoon. However, I didn't join the labs and I visited the holy city MyJava in Slovakia instead. Tasting Moravian wines in a wine cellar finished this long day.

Sunday

Few of us started the day with a hard 9km run. The night was too short. Lightning talks continued during the morning and we finished at lunch time. Finally we made a group photo and said goodbye to this unforgettable event.

The topics

You'll find most of the lightning talks (slides+audio) on jOpenSpace web during November. The area covered was very wide:
  • hardware - Quadcopters, Sparki robot, Raspbery PI
  • soft-skills & interesting books - Thinker's Toolkit
  • databases - MUMPS, Hazelcast
  • testing - SmartMeter, COllaborative Editor testing
  • tools - Code review with Atlassian, Future of Markdown
  • and many other interesting topics (E.g. the truth about drug manufacturers)
My presentation was about Java Security Manager and pro-grade library. The slides are online.
Few photos from my phone is in G+ album.

pátek 26. září 2014

Speed-up ApacheDS LDAP server for testing

Using the ApacheDS for unit testing can be painful if you need to restart/reconfigure the server several times. IT'S SOOO SLOOOOW.

The reason is simple. The default configuration creates a nice directory structure and unpacks all the schema files from JAR file to one of the created directories. Then it creates a file based JDBM partition for you. And it loads your LDIF data to it.

It means many, money, many I/O operations even before the LDAP starts.

Nevertheless, ApacheDS has a nice API to resolve this issue. You will need to make your hands dirty little bit, but it's worth it.

Follow these 3 simple steps and it's all:

  1. Create schema partition class, which stores LDAP schema data in-memory only: sample InMemorySchemaPartition.java
  2. Create DirectoryServiceFactory implementation, which will use in-memory AvlPartitions instead of JDBM and as a schema partition it will use class from the first step: sample InMemoryDirectoryServiceFactory.java
  3. use the new DirectoryServiceFactory to create embedded LDAP

Embedded LDAP

There are 2 simple ways, how to create LDAP server in your unit tests. One uses ApacheDS annotations and the second uses API directly. Here are sample code snippets, which show how to enable the custom InMemoryDirectoryServiceFactory for both of the ways.

Annotations
@CreateDS(
 name = "JBossOrgDS",
 factory=InMemoryDirectoryServiceFactory.class,
 partitions = {
  @CreatePartition(
   name = "jbossorg",
   suffix = "dc=jboss,dc=org",
   contextEntry = @ContextEntry(
    entryLdif =
     "dn: dc=jboss,dc=org\n" +
     "dc: jboss\n" +
     "objectClass: top\n" +
     "objectClass: domain\n\n" )
  )
 })
@CreateLdapServer (
 transports = { @CreateTransport( protocol = "LDAP",  port = 10389, address = "0.0.0.0" ) })
public static void createLdapServer() throws Exception {
 DirectoryService directoryService = DSAnnotationProcessor.getDirectoryService();
 final SchemaManager schemaManager = directoryService.getSchemaManager();
 //import your LDIF here
 ServerAnnotationProcessor.instantiateLdapServer((CreateLdapServer) AnnotationUtils.getInstance(CreateLdapServer.class), directoryService).start();
}

API
DirectoryServiceFactory dsf = new InMemoryDirectoryServiceFactory();
dsf.init("JBossOrgDS");
DirectoryService directoryService = dsf.getDirectoryService();
SchemaManager schemaManager = masterDirectoryService.getSchemaManager();

PartitionFactory pf = dsf.getPartitionFactory();
Partition p = pf.createPartition(schemaManager, "jbossorg", "dc=jboss,dc=org", 1000, workingDir);
p.initialize();
directoryService.addPartition(p);

//import LDIF here

LdapServer ldapServer = new LdapServer();
ldapServer.setServiceName("DefaultLDAP");
Transport ldap = new TcpTransport( "0.0.0.0", 10389, 3, 5 );
ldapServer.addTransports(ldap);
ldapServer.setDirectoryService(directoryService);
ldapServer.start();

I bet your ApacheDS startup time falls down at least by 50% with these in-memory settings.

středa 13. srpna 2014

Debug security in WildFly 8.x / EAP 6.x / JBoss AS7

If you try to find what are the security components doing in WildFly 8.x (or EAP 6.x + AS7) then enable TRACE log level for several categories.

You can simply use JBoss CLI to configure it:

cd $JBOSS_HOME/bin
./jboss-cli.sh -c << EOT
/subsystem=logging/logger=org.jboss.security:add(level=ALL)
/subsystem=logging/logger=org.jboss.as.security:add(level=ALL)
/subsystem=logging/logger=org.picketbox:add(level=ALL)
/subsystem=logging/logger=org.apache.catalina.authenticator:add(level=ALL)
/subsystem=logging/logger=org.jboss.as.web.security:add(level=ALL)
/subsystem=logging/logger=org.jboss.as.domain.management.security:add(level=ALL)
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=level, value=ALL)
quit
EOT

If you don't use $JBOSS_HOME environment variable, just replace it with path to your application server installation.