I am trying to connect to db2 from a java client running the application as a jar. The jar is a super-jar with all dependencies generated by the shade plugin.
When I run the program from my ide(Netbeans) it runs fine, but when I run it from commandline like this it fails:
java -jar target/locationImporter.jar
The exception I get is:
Exception in thread "main" java.lang.NullPointerException
at com.ibm.as400.access.PortMapper.getServerSocket(PortMapper.java:216)
at com.ibm.as400.access.AS400ImplRemote.signonConnect(AS400ImplRemote.java:2363)
at com.ibm.as400.access.AS400ImplRemote.signon(AS400ImplRemote.java:2278)
at com.ibm.as400.access.AS400.sendSignonRequest(AS400.java:3142)
at com.ibm.as400.access.AS400.promptSignon(AS400.java:2706)
at com.ibm.as400.access.AS400.signon(AS400.java:4035)
at com.ibm.as400.access.AS400.connectService(AS400.java:1184)
at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:3338)
at com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1419)
at com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:1256)
at com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:395)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at dataprep.ConnectionSupplier.getConnection(ConnectionSupplier.java:18)
at dataprep.SqlFileRunner.runScript(SqlFileRunner.java:65)
at dataprep.SqlFileRunner.runSqlFile(SqlFileRunner.java:26)
at dataprep.PrepareDatabase.main(PrepareDatabase.java:26)
The code that fails is:
Class.forName("com.ibm.as400.access.AS400JDBCDriver").newInstance();
return DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);
Since it runs in my ide, I know that the url, user and password is correct.
My shade plugin is configured like this in my pom:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>launcher</shadedClassifierName>
<finalName>locationImporter</finalName>
<createDependencyReducedPom>false</createDependencyReducedPom>
<minimizeJar>true</minimizeJar>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>