Hi, thanks for comments.
With supplier it works, but then in your code you need to have:
@Inject
private IJdbiSupplier jdbiSupplier;
...
Jdbi jdbi = jdbiSupplier.get();
jdbi.useHandle(h->{
...
});
which I wanted to avoid.
Would it be a solution to add a check to GuiceFieldValueFactory?
There is this code on line 86:
if (wrapInProxies)
{
target = LazyInitProxyFactory.createProxy(field.getType(), locator);
}
I propose this change:
|boolean isTransient = Modifier.isTransient(field.getModifiers());|
if (wrapInProxies && !isTransient)
{
target = LazyInitProxyFactory.createProxy(field.getType(), locator);
}
which I think is fine as there is no need for proxy as the field is not
serialized anyway.
Then you can just do:
@Inject
private transient Jdbi jdbi;
...
jdbi.useHandle(h->{
..
});
And as Jdbi is used as a singleton, this approach makes sense to me, am
I missing something?
If you are fine with that, should I make a pull request?
Adding Objenesis did not help.
Thanks.
Vit
On 2/7/19 7:45 AM, Martin Grigorov wrote:
Hi,
On Wed, Feb 6, 2019 at 7:55 PM Vit Rozkovec <vit.rozko...@gmail.com> wrote:
Hi,
have any of you tried to inject Jdbi [1] via Guice to your component
hierarchy? I cannot do so without using intermediate Jdbi supplier.
Using supplier/provider is perfectly fine!
Please see this issue:
https://github.com/jdbi/jdbi/issues/1451
I've tried to turn off wrapping in proxies for Guice, but it gives me:
org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream$ObjectCheckException:
The object type is not Serializable!
A problem occurred while checking object with type: org.jdbi.v3.core.Jdbi
As you already know this is not good. The appication should not
(de)serialize the Jdbi instance between requests.
with wrapInProxies set to true in GuiceComponentInjector the exception is:
java.lang.IllegalArgumentException: No visible constructors in class
org.jdbi.v3.core.Jdbi
You can try to add Objenesis to the classpath. LazyInitProxyFactory will
use it instead of CGLIB if it is available.
CGLIB requires the constructor.
I see where it comes from: LazyInitProxyFactory
It seems to me that it is possible only to make happy Guice or Wicket,
but not both.
Just use supplier/provider!
Any hints appreciated.
Thank you.
Vit
[1] http://jdbi.org/