2022-12-23

org.hibernate.AssertionFailure: possible non-threadsafe access to the session

The error is quite clear, but there are many possible causes, so I will just point out one. If you made custom repo implementation in Spring you might have injected EntityManager and then used it for some more advanced operations (normally not available from Spring data). First let's look at valid example:

https://stackoverflow.com/a/26765003/158037

It injects EM as a field and then creates new SimpleJpaRepository, for each call to findAll(). In my first attempt I had created an instance of that class in constructor, to reuse it and ended with that "AssertionFailure: possible non-threadsafe access to the session" error.

2022-05-31

Async Profiler - quick profiling for any application

Are you tired of setting up Java APM agents, configuring some arcane ENV variables (does "org.jboss.logmanager" ring any bells)? Just try Async Profiler ( https://github.com/jvm-profiling-tools/async-profiler ). It is even trivial to use on your already *running* docker images. For example: 


$ kubectl -n my-namespace cp ./async-profiler-2.8-linux-x64.tar.gz my-pod:/root $ winpty kubectl -n my-namespace exec -it my-pod bash root@my-pod:/# cd /root root@my-pod:~# tar xf async-profiler-2.8-linux-x64.tar.gz root@my-pod:~# cd async-profiler-2.8-linux-x64 root@my-pod:~/async-profiler-2.8-linux-x64# ./profiler.sh -d 1200 -i 10ms -f profile.html 6 Profiling for 1200 seconds Done root@@my-pod:~/async-profiler-2.8-linux-x64# exit kubectl -n my-namespace cp my-pod:/root/async-profiler-2.8-linux-x64/profile.html ./profile.html
Where "-i 10ms" was how often to run sampling and "6" was the pid of java process (you can check for one with `jps` or plain old `ps`). You can view the resulting flame graph (the local "profile.html" file) in any browser.

2020-04-20

Sensible Hibernate batch properties


  <property name="hibernate.jdbc.batch_size" value="30"/>
  <property name="hibernate.order_inserts" value="true"/>
  <property name="hibernate.order_updates" value="true"/>
  <property name="hibernate.jdbc.batch_versioned_data" value="true"/>
Also for postgresql and hibernate < 5.2 add "?reWriteBatchedInserts=true" to connection url.

2020-03-30

Checking private (non shared) memory usage for Postgresql connection (PID)

Create function:

 CREATE OR REPLACE FUNCTION pid_mem_usage( pid integer)
 RETURNS integer AS $$
 DECLARE l_command TEXT; res integer;
 BEGIN
  SET client_min_messages = 'error';
  l_command  := ' cat /proc/' || pid || '/smaps | grep "^Private" | awk ''{a+=$2}END{print a * 1024}'' ';
  raise notice '%',l_command;
  execute 'create temp table if not exists z (a int) ';
  execute 'copy z from program ' || quote_literal(l_command);
  execute 'select sum(a) from z' into res;
  execute 'truncate z';
 RETURN res;
 END;
 $$ LANGUAGE plpgsql;
Sample usage:
select pid_mem_usage(pid),pid,usename,backend_start,xact_start,
query from pg_stat_activity  order by 1 desc limit 25;

Based on from https://www.depesz.com/2012/06/09/how-much-ram-is-postgresql-using/

2019-07-18

Checking for index bloat in Psotgresql

SELECT
    t.tablename,
    indexname,
    c.reltuples AS num_rows,
    100.0*pg_relation_size(quote_ident(t.schemaname)::text||'.'||quote_ident(indexrelname)::text)/(pg_relation_size(quote_ident(t.schemaname)::text||'.'||quote_ident(t.tablename)::text)+1)as ratio,
    pg_relation_size(quote_ident(t.schemaname)::text||'.'||quote_ident(t.tablename)::text) AS table_size_raw,
    pg_relation_size(quote_ident(t.schemaname)::text||'.'||quote_ident(indexrelname)::text) AS index_size_raw,
    pg_size_pretty(pg_relation_size(quote_ident(t.schemaname)::text||'.'||quote_ident(t.tablename)::text)) AS table_size,
    pg_size_pretty(pg_relation_size(quote_ident(t.schemaname)::text||'.'||quote_ident(indexrelname)::text)) AS index_size,
    CASE WHEN indisunique THEN 'Y'
       ELSE 'N'
    END AS UNIQUE,
    idx_scan AS number_of_scans,
    idx_tup_read AS tuples_read,
    idx_tup_fetch AS tuples_fetched
FROM pg_tables t
LEFT OUTER JOIN pg_class c ON t.tablename=c.relname
LEFT OUTER JOIN
    ( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns, idx_scan, idx_tup_read, idx_tup_fetch, indexrelname, indisunique FROM pg_index x
           JOIN pg_class c ON c.oid = x.indrelid
           JOIN pg_class ipg ON ipg.oid = x.indexrelid
           JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid AND (psai.schemaname='public' or psai.schemaname='partitions') )
    AS foo
    ON t.tablename = foo.ctablename
WHERE (t.schemaname='public' or t.schemaname='partitions') 

ORDER BY 5 desc, 6 desc
Compare ratio among partitions of same table to find bloated indexes - the one for current month is always bloated :).

2019-05-28

jGitFlow: "CheckoutConflictException: Checkout conflict with files"

This error probably means the master and develop have diverged and develop is behind master. Just merge master to develop and try building again.

2018-01-16

Wildfly: NoSuchMethodError: Logger.tracef

When adding Arquillian based integration tests to older projects I often encounter exception:
Exception in thread "Remoting "endpoint" task-4" java.lang.NoSuchMethodError: org.jboss.logging.Logger.tracef(Ljava/lang/String;I)V
        at org.jboss.remotingjmx.VersionedConectionFactory$ClientVersionReceiver.handleMessage(VersionedConectionFactory.java:158)
        at org.jboss.remoting3.remote.RemoteConnectionChannel$5.run(RemoteConnectionChannel.java:456)
        at org.jboss.remoting3.EndpointImpl$TrackingExecutor$1.run(EndpointImpl.java:717)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
It is caused a mismatch in versions of jboss-logging. The solution is to find additional version:
$ mvn dependency:tree |grep jboss-logging
...

[INFO] +- com.google.guava:guava:jar:18.0:compile
[INFO] +- org.jboss.resteasy:resteasy-client:jar:3.0.19.Final:compile
[INFO] |  +- org.jboss.resteasy:resteasy-jaxrs:jar:3.0.19.Final:compile
[INFO] |  |  +- org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.0_spec:jar:1.0.0.Final:compile
[INFO] |  |  +- org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:jar:1.0.0.Final:compile
[INFO] |  |  +- javax.activation:activation:jar:1.1.1:compile
[INFO] |  |  +- commons-io:commons-io:jar:2.1:compile
[INFO] |  |  \- net.jcip:jcip-annotations:jar:1.0:compile
[INFO] |  \- org.jboss.logging:jboss-logging:jar:3.1.4.GA:compile
And to exclude it in pom.xml:
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
            <version>3.0.19.Final</version>
            <scope>provided</scope>
            <type>jar</type>
            <exclusions>
                <exclusion>
                    <groupId>org.jboss.logging</groupId>
                    <artifactId>jboss-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2016-06-02

F5 VPN Client under Linux

It looks like many places have outdated or plain wrong instructions about connecting to f5 VPN under Linux is a bit outdated so a quick reminder:
  1. Ignore web plugin/extension, it probably won't work anyway under 64 bit browser with disabled NPAPI support
  2. download and extract https://vpn.somehost.com/public/download/linux_sslvpn.tgz
  3. execute Install.sh
  4. f5fpc --start -t vpn.somehost.com

2015-05-29

Most common (anti-)pattern

I guess that by now everyone knows that Singleton is considered mostly harmful and definitely overused. Many people have said that it hinders testing but there is nothing more convincing that unit test that completes fine on its own but mysteriously fails when whole suite is launched. It looks strange when even after doing reset() and adding new when() rules the mock created by Mockito behaves in wrong way. It is a lot less mysterious when you find a singleton that was injected with mock object on class load and ignores the fact that whole Spring context was created and destroyed multiple times ever since.

2015-03-26

ORA-00932: inconsistent datatypes: expected - got (N)CLOB

If you are modifying query and suddenly started getting ORA-00932 out of nowhere, remember that this error comes not only from comparing CLOB column with something else but also from using distinct on table that has CLOB columns.

2014-10-17

Spring component-scan classpath pitfall

There is one non-intuitive behavior with Spring's component-scan - it works on _current_ classpath. For example:

Project A

context-a.xml:

    <component-scan package="x">


Project B

context-a.xml:

    <import resource="classpath:/a.xml" /> 

    <component-scan package="x.y">


This will load all components from  package "x.y" already at <import> tag.  It can lead to very strange errors in bigger projects (sudden appearance of "NoSuchBeanDefinitionException: No qualifying bean of type" errors) and  trying to cherry-pick used imports/components might be hard or even impossible.
There is similar issue with integration tests - Spring will scan all classes in package, including test files, for components. If you are using inner static classes to override context configuration spring will pick up all of them. And that problem might propagate if you are reusing test support code (<classifier>tests</classifier>). Lucky this one is easy to deal with: it is possible to filter it out:
<context:component-scan base-package="my.package" >
        <context:exclude-filter type="annotation" expression="org.springframework.context.annotation.Configuration" />
        <context:exclude-filter type="regex" expression=".*IT" />
        <context:exclude-filter type="regex" expression=".*Test" />
</context:component-scan>

2013-06-07

Unable to find a public constructor for class org.jboss.resteasy.core.AsynchronousDispatcher

Takim wspaniałym komunikatem wita nas próba zdeployowania prostej aplikacji używającej RestEasy na JBossa 7.1. Obejście jest proste ale mało wygodne. Trzeba wyłączyć automatyczne skanowanie w web.xml:
<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>false</param-value>
</context-param>
I ręcznie podać usługi np.:
<context-param>
    <param-name>resteasy.resources</param-name>
    <param-value>net.purevirtual.web.MyService</param-value>
</context-param>
Inne opcje konfiguracyjne są w dokumentacji . A skoro już jesteśmy przy temacie AS: http://stackoverflow.com/questions/12511192/replaced-with-quot-when-loading-page Tak, nie ma to jak wersja serwera aplikacji z dopiskiem Final, która od czasu do czasu kompletnie rozwala serwowany kod JavaScript

2013-02-22

File extensions recognized by Drools

Just in case anybody else needs it. I didn't know why KieRepository didn't pick up one file, of course I had a typo in file extension.

typeextensions
Drools Rule Language.drl
Drools XML Rule Language.xdrl
Drools DSL.dsl
Drools DSL Rule.dslr
Drools Rule Flow Language.rf
jBPM BPMN2 Language.bpmn, .bpmn2
Decision Table.xls
Binary Package.pkg
Drools Business Rule Language.brl
Change Set.xcs
XSD.xsd
Predictive Model Markup Language.pmml
Knowledge Descriptor.descr
List is copied from org.drools.builder.ResourceType.

2012-10-14

WINE oneliners

fixme:d3dcompiler:D3DCompile data data_size 424, filename "memory", defines (nil), include 0x32ed50, entrypoint "VShad",
is solved by
winetricks d3dcompiler_43

Switching to multi-arch on NVidia amd64 systems

The following packages have unmet dependencies:
 nvidia-glx : Depends: xserver-xorg-video-nvidia (= 304.60-1) but it is not going to be installed
              Recommends: nvidia-settings
              Recommends: libgl1-nvidia-glx-i386 but it is not installable
              Conflicts: nvidia-glx:i386 but 304.60-1 is to be installed

or
"err:module:load_builtin_dll failed to load .so lib for builtin L"opengl32.dll": libGL.so.1: cannot open shared object file: No such file or directory"
"Direct rendering is disabled, most likely your OpenGL drivers haven't been installed correctly"
is fixed by
sudo dpkg --add-architecture i386
sudo apt-get update
#remove ALL nvidia related packages
dpkg -l *nvidia* |cut -f 3 -d ' '|grep -v any|grep nvidia|xargs sudo apt-get purge -y
#install the driver just for amd64
sudo apt-get install nvidia-glx
#install the openGl libs for both archs
sudo apt-get install libgl1-nvidia-glx libgl1-nvidia-glx:i386

2012-06-14

Java Classes Fun Fact

java.lang.NoClassDefFoundError can be caused by runtime exception (i.e. NPE) in static initialization blocks or even variable initialization of class you are trying to use.

2012-02-09

Reading outlook .msg files under Linux

Got an email in format unreadable for your mail reader?
I always forget that there is great tool for doing just that: http://code.google.com/p/ruby-msg/

2012-01-07

Valgrind - "client switching stacks"

If you ever start to receiving following warning from Valgrind:
Warning: client switching stacks?
Followed by many error messages like "Invalid read/write" containing a note: "Address  is on thread 1's stack" then the cause is very simple. You are just allocating too large variables on stack - in my case I had too large array, as local variable, in one of functions. If you can't or don't want to use heap it is possible to tune valgrind with "--max-stackframe" parameter i.e.
valgrind --max-stackframe=10485760 ./a.out
This will prevent false positive detection  of stack switching up to 10MB.

One additional, much more obvious tip, use "-fno-inline" when building C++ binaries for use with valgrind, otherwise there won't be line numbers in stacktraces for any template functions.

2011-06-14

Subversion not working under Netbeans on fresh linux system

Simple and annoying bug. Solution: 
http://stackoverflow.com/questions/1679099/netbeans-subversion-authentication-failed