čtvrtek 27. března 2014

How to run Tomcat with remote debugger

This works with Tomcat 7 (probably works with other Tomcat versions as well)

On Windows add into catalina.bat

set CATALINA_OPTS=%CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

Then run startup.bat

And now you can connect remote debugger on port 8000

úterý 21. ledna 2014

Jak převést Subversion repo do Mercurialu pomocí HgSubversion

Jak převést Subversion repository do Mercurialu?

Používal jsem dva způsoby:
  1. pomocí příkazu hg convert o tom jsem psal tady: http://vondrnotes.blogspot.cz/2012/07/jak-prevest-subversion-repo-do.html
  2. pomocí HgSubversion o tom budu psát tady
Abych to stručně shrnul, tak 'hg convert' je jednoduchý spolehlivý způsob, který by většinou mohl bohatě stačit. (Spolehlivě mi převedl i 80 GB repo všechny branche a vééélmi velkou historii) 'HgSubversion' je trošku složitější a zdá se mi a může s tím být o trochu víc problémů. Na druhou stranu je o něco chytřejší a když se to zadaří, tak je výsledek lepší. (například commity jsou seřazeny správně podle data ve všech branchí, hg convert totiž udělá všechny commity z jedné branche, pak všechny commity z druhé atd.)


Jak převést Subversion repository do Mercurialu pomocí HgSubversion

  1. Instalovat podle http://mercurial.selenic.com/wiki/HgSubversion
    • - hg clone http://bitbucket.org/durin42/hgsubversion/ ~/hgsubversion
    • - Do ~/.hgrc dát:
      [extensions]
      hgsubversion = ~/hgsubversion/hgsubversion
      
  2. hg init (create repository)
  3. V repositari upravit soubory: Do .hg/hgrc dát
    [paths]
    default = https://muj-svn-server/moje/cesta/k/svn/repu
    
    [auth]
    bb.prefix = https://muj-svn-server/moje/cesta/k/svn/
    bb.username = moje.jmeno
    bb.password = moje.heslo
    

    Poznámka - Jak se vyhnout heslu v plaintextu:

    • do ~/.hgrc dát:
      [extensions]
      mercurial_keyring=
    • a vymazat řádek s heslem (bb.password = moje.heslo)
    • Mercurial se pak zeptá na heslo při prvním neúspešném přihlášení se zeptá na nové heslo

  4. SSL certifikát k svn (jen pokud je potřeba)
    Tohle musí být v 'userhome = ~/.hgrc (~/mercurial.ini)' - kvůli certifikátům pro svn
    [hostfingerprints]
    muj-svn-server = mu:j0:fi:ge:r0:pr:in:t0:b7:05:0e:81:93:97:22:67:fe:9a:0a:df
    
    Nebo toto, pokud fingerprint nezabere:
    [web]
    cacerts=
    ; cacerts je tu pro hgsubversion
    
  5. Pak převést svn do mercurialu
    hg pull
    (možná to třeba v průběhu spadne, ale to nevadí prostě se znova pustí hg pull a ono to bude pokračovat)
  6. A je to :)
    hg update
    a hurá do mercurialu!

Poznámky

Možný problém, který muže nastat pouze pokud se vývíjí a commituje do svn pomocí hgsubversion
Dá se to rozbít, že pak nejde udělat pull/push a hlásí to něco jako
Pull errors: abort: unknown revision '327d8c072e94f13489ed1ae2aaa4be66584d00b2' To se může povést opravit příkazem:

hg svn rebuildmeta

č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...

středa 7. srpna 2013

Groovy - kompilace Mavenem pomoci groovy-eclipse-compiler pluginu

Konečně to vypadá, že mám funkční jednoduchý způsob jak mavenem kompilovat Groovy a provolávat libovolně mezi sebou třídy napsané v Javě a třídy napsané v Groovy! Takhle vypadá kus pom.xml, který se o to stará: Mini samplový projekt jde stáhnout tady: https://bitbucket.org/bugs_/samples/src/default/MavenCompileGroovyAndJava/?at=default

čtvrtek 21. února 2013

JAXB marshal element without @XmlRootElement anotation

When you are trying marshal MyClass, that is not anotated as @XmlRootElement element, you can obtain:

unable to marshal type "org.company.MyClass" as an element
because it is missing an @XmlRootElement annotation

Possible workaround is marshal your object in this way:

I have found, that more details can be found here:
http://weblogs.java.net/blog/2006/03/03/why-does-jaxb-put-xmlrootelement-sometimes-not-always
http://stackoverflow.com/questions/819720/no-xmlrootelement-generated-by-jaxb

středa 13. února 2013

Jax-WS - SchemaValidation zkouší číst stream 2x

JAX-WS, Metro, hází "Stream already closed" Při použití streamovaného dataSource Stane se to, že když je zapnutá Schema Validation, tak při validaci se přečte celý stream (ten attachment). Takže validace ho celý přečte a když dojde na skutečné spracování requestu a chtějí se přečíst data, tak to hodí "Stream already closed". A je po srandě.

Neznám žádné rozumné řešení tohoto problému. U nás jsme to pořešili tím, že jsme udělali vlastní DataSource. Která obalí skutečný stream a při prvním zavolání metody getInputStream() - což je z validace nevrátí skutečný stream, ale jen "new ByteArrayInputStream(new byte[]{})"
A až při druhém zavolání metody getInputStream() vrátí skutečný stream.
Tím ho validace nezničí a vše funguje. Jak říkám, jestli ví někdo jak to řešit lépe - sem s tím.

Takový hrozný DataSource pak vypadá zhruba takhle:

pátek 21. září 2012

Windows update KB2735855

Hello, 21.9.2012

Do you have Windows?
Is your stream freezing, timeouting, or you are getting samething like this:

missing CR

Caused by: org.jvnet.mimepull.MIMEParsingException: java.io.IOException: missing CR
 at org.jvnet.mimepull.MIMEParser.fillBuf(MIMEParser.java:436)
 at org.jvnet.mimepull.MIMEParser.readBody(MIMEParser.java:204)
 at org.jvnet.mimepull.MIMEParser.access$600(MIMEParser.java:62)
 at org.jvnet.mimepull.MIMEParser$MIMEEventIterator.next(MIMEParser.java:154)
 at org.jvnet.mimepull.MIMEParser$MIMEEventIterator.next(MIMEParser.java:123)
 at org.jvnet.mimepull.MIMEMessage.makeProgress(MIMEMessage.java:193)
 at org.jvnet.mimepull.MIMEMessage.parseAll(MIMEMessage.java:176)
 at org.jvnet.mimepull.MIMEMessage.(MIMEMessage.java:89)
 at com.sun.xml.ws.encoding.MimeMultipartParser.(MimeMultipartParser.java:88)
 at com.sun.xml.ws.encoding.MimeCodec.decode(MimeCodec.java:180)
 at com.sun.xml.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:352)
 ... 101 more
Caused by: java.io.IOException: missing CR
 at sun.net.www.http.ChunkedInputStream.processRaw(ChunkedInputStream.java:378)
 at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:545)
 at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:582)
 at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:669)
 at java.io.FilterInputStream.read(FilterInputStream.java:116)
 at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2668)
 at java.io.FilterInputStream.read(FilterInputStream.java:116)
 at org.jvnet.mimepull.MIMEParser.fillBuf(MIMEParser.java:434)
 ... 111 more
or
XML reader error: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '<' (code 60)excepted either space or "?>" after PI target

Uninstall Windows Update KB2735855

Boys totally destroyed TCP. I hate them! It took us a lot of time to find out what is going on.