Zobrazují se příspěvky se štítkemJava. Zobrazit všechny příspěvky
Zobrazují se příspěvky se štítkemJava. Zobrazit všechny příspěvky

čtvrtek 12. prosince 2013

Maven - Jak zjistit licence knihoven

mvn dependency:resolve
Nejprve se musí spustit tenhle příkaz.

mvn license:license-list
Vypíše seznam všech licencí ze všech dependencies., který vypadá např. takto:
 * agpl_v3   : GNU Affero General Public License (AGPL) version 3.0
 * apache_v2 : Apache License version 2.0
 * fdl_v1_3  : GNU Free Documentation License (FDL) version 1.3
 * gpl_v1    : GNU General Public License (GPL) version 1.0
 * gpl_v2    : GNU General Public License (GPL) version 2.0
 * gpl_v3    : GNU General Public License (GPL) version 3.0
 * lgpl_v2_1 : GNU General Lesser Public License (LGPL) version 2.1
 * lgpl_v3   : GNU General Lesser Public License (LGPL) version 3.0
 * mit       : MIT-License 

mvn license:license-list -Ddetail
Ke každé licenci vypíše i krátký popis.

mvn project-info-reports:dependencies
Do "target/site/dependencies.html" nageneruje html se seznamem knihoven potřebných pro překlad/testy...

čtvrtek 7. června 2012

Dva Tomcaty s různými čísly portu.

Odpověď na otázku: "Jak docílit toho, aby jsme měli najednou spuštěné dva Tomcaty s různými čísli portu?". Tady je jeden ze způsobů jak toho docílit, mýslím, že ten nejjednodušší. Klidně mi napište o lepších (nebo hroších) způsobech, nebo o problémech - budu rád.

Takhle to funguje s Tomcatem 7. Mýslím, že stejně se to dělá i u Tomcatu 6.

Apache Tomcat změna portu. Tomcat 7, Tomcat 6

Návod

Máme nainstalovaný tomcat a chceme rozjet sním ještě jeden na jiném portu.

  1. Zkopírujeme celý adresář s tomcatem
  2. Upravíme tři porty v souboru "<adresář s tomcatem>/conf/server.xml"
    1. <Server port="8005" shutdown="SHUTDOWN">
      8005 změníme třeba na 8006
    2. <Connector port="8080" protocol="HTTP/1.1"
                 connectionTimeout="20000"
                 redirectPort="8443" />
      8080 změníme třeba na 8081
    3. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
      8009 změníme třeba na 8010

Teď půjdou spustit oba tomcaty, jeden poběží na portu 8080, druhý na portu 8081.

Na takové to domácí žvýkání by to mělo stačit :-)

pondělí 14. května 2012

DBCP - validationQuery for various Databases

Info

When you are using DBCP pool, you can use property testOnBorrow and testOnReturn to test if connection is still valid. Unfortunately you have to set property validationQuery to make it work.
Problem is: What value should be in validationQuery?

What is validationQuery

validationQuery is the SQL query that will be used to validate connections. This query MUST be an SQL SELECT statement that returns at least one row.

Unfortunately for every database works another validationQuery. After some googling I have collected this:
Database validationQuery notes
hsqldb select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
Oracle select 1 from dual
DB2 select 1 from sysibm.sysdummy1
mysql /* ping */ select 1 not tested
microsoft sql select 1 not tested
postgresql select version(); not tested
ingres select 1 not tested
derby values 1 not tested
H2 select 1 not tested


Idea: Get validationQuery according to JDBC driver

If you support multiple databases, you can select validationQuery according to JDBC driver.

Here is simple class, which return validationQuery according to JDBC driver class name.

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ValidationQuery {

    public String getValidationQuery(String driver) {
        Properties properties = loadProperties();
        return properties.getProperty(driver, "");
    }

    private Properties loadProperties() {
        String propertyFilename = "db.validation.properties";
        try {
            Properties props = new Properties();
            InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(propertyFilename);
            props.load(resourceAsStream);
            resourceAsStream.close();
            return props;
        } catch (IOException e) {
            throw new RuntimeException("Cannot load properties file '" + propertyFilename + "'.", e);
        }
    }

    //Example: Get validationQuery for hsqldb
    public static void main(String[] args) {
        System.out.println(new ValidationQuery().getValidationQuery("org.hsqldb.jdbcDriver"));
    }
}

And here is properties file, that you have to put on classpath and name it as "db.validation.properties"

#hsqldb
org.hsqldb.jdbcDriver=select 1 from INFORMATION_SCHEMA.SYSTEM_USERS

#Oracle
oracle.jdbc.driver.OracleDriver=select 1 from dual

#DB2
com.ibm.db2.jcc.DB2Driver=select 1 from sysibm.sysdummy1

#mysql
com.mysql.jdbc.Driver=/* ping */ select 1
org.gjt.mm.mysql.Driver=/* ping */ select 1

#microsoft sql
com.microsoft.sqlserver.jdbc.SQLServerDriver=select 1

#postgresql
org.postgresql.Driver=select version();

#ingres
com.ingres.jdbc.IngresDriver=select 1

#derby
org.apache.derby.jdbc.ClientDriver=values 1

#H2
org.h2.Driver=select 1

If you have better idea how to set validationQuery or you have an tip for update of "db.validation.properties" file. Do not hesitate and let me know.

More validation queries can be found here StackOverflow - dbcp-validationquery-for-different-databases.

úterý 29. listopadu 2011

Zip4j java knihovna, která opravdu umí zipovat.

Vypadá to, že pro Java konečně existuje použitelná, jednoduchá a funknční knihovna, která umí zipovat. Bože děkuji!

Domovské stránky projektu: http://www.lingala.net/zip4j/

Jinak pár týdnu tuhle knihovnu používáme a zatím nemáme jediný problém.

Příkládek

Zazipuje obsah adresáře "c:/sourceDir" do souboru "c:/target.zip" a použije nižší úroveň komprese.

  ZipFile zipFile = new ZipFile("c:/target.zip");
  File sourceFile = new File("c:/sourceDir");
  ZipParameters zipParameters = new ZipParameters();
  zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_FAST);
  zipParameters.setIncludeRootFolder(false);
  zipFile.createZipFileFromFolder(sourceFile, zipParameters, false, 0);

Maven dependency

  <dependency>
     <groupid>net.lingala.zip4j</groupid>
     <artifactid>zip4j</artifactid>
     <version>1.2.5</version>
  </dependency>

pondělí 21. listopadu 2011

Java - SSL for Jersey Client

Programové nastavení SSL na Jersey
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import java.security.KeyStore;
...

private void setupSSL(ClientConfig clientConfig) {
    try {        
        //Pokud se použije starší:
        //SSLContext.getInstance("SSL");
        //muže to skončit na chybe pri handshake
        SSLContext ctx = SSLContext.getInstance("TLS");

        KeyStore ks = KeyStore.getInstance("JKS");

        //Nacteni z filu
        //ks.load(new FileInputStream("d:/tmp7/clientstore"), "KeystorePassword".toCharArray());

        //nacteni z classpathy
        URL clientStore = getClass().getResource("/path/to/store/clientstore");
        ks.load(clientStore.openStream(), "KeystorePassword".toCharArray());

        //kdyz se pouzije
        //TrustManagerFactory.getInstance("SunX509", "SunJSSE");
        //Tak to nepojede na IBM jave, protože ta ma IbmX509 a ne SunX509
        //Naštěstí tohle funguje na obou. On uz si to dohleda:
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
        tmf.init(ks);
        TrustManager tms[] = tmf.getTrustManagers();
        ctx.init(null, tms, null);
        clientConfig.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, new HTTPSProperties(null, ctx));
    } catch (Exception ex) {
        throw new RuntimeException("Ssl setup failed", ex);
    }
}
...
ClientConfig clientConfig = new DefaultClientConfig();
client = Client.create(clientConfig);

pondělí 15. srpna 2011

Java - Hello world bez metody main()

Taková zajímavost. Jak napsat java program bez main() metody.
public class NoMainHelloWorld {
    static {
        System.out.println("Hello world.");
        System.exit(0);
    }
}

Předtím než java zavolá metodu main(), tak musí třídu nahrát, při nahrání třídy se inicializují statické bloky - při té příležitosti se v našem programu napíše "Hello world" a dřív než mu začne vadit, že nemá metodu main(). Tak se zavolá System.exit(0).