Dealing with Not Serializable classes in Java

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Dealing with Not Serializable classes in Java

Dominik Wosiński
Hey, 

I was wondering how do You normally deal with fields that contain references that are not serializable. Say, we have a custom serialization schema in Java that needs to serialize LocalDateTime field with ObjectMapper.  This requires registering specific module for ObjectMapper and this makes it not serializable (module contains some references to classes that are not serializable). 
Now, if You would initialize ObjectMapper directly in the field this will cause an exception when deploying the job. 

Normally I would do : 
@Override
public byte[] serialize(Backup backupMessage) {
if(objectMapper == null) {
objectMapper = new ObjectMapper().registerModule(new JavaTimeModule());
} ... }
But I was wondering whether do You have any prettier option of doing this? 

Thanks,
Dominik.
Reply | Threaded
Open this post in threaded view
|

Re: Dealing with Not Serializable classes in Java

Chesnay Schepler
The null check in the method is the general-purpose way of solving it.
If the ObjectMapper is thread-safe you could also initialize it as a static field.

On 26.08.2018 17:58, Dominik Wosiński wrote:
Hey, 

I was wondering how do You normally deal with fields that contain references that are not serializable. Say, we have a custom serialization schema in Java that needs to serialize LocalDateTime field with ObjectMapper.  This requires registering specific module for ObjectMapper and this makes it not serializable (module contains some references to classes that are not serializable). 
Now, if You would initialize ObjectMapper directly in the field this will cause an exception when deploying the job. 

Normally I would do : 
@Override
public byte[] serialize(Backup backupMessage) {
    if(objectMapper == null) {
        objectMapper = new ObjectMapper().registerModule(new JavaTimeModule());
    }
...
}
But I was wondering whether do You have any prettier option of doing this? 

Thanks,
Dominik.


Reply | Threaded
Open this post in threaded view
|

Re: Dealing with Not Serializable classes in Java

Dominik Wosiński
Hey Paul,
Yeah that is possible, but I was asking in terms of serialization schema. So I would really want to avoid RichFunction :)

Best Regards,
Dominik.

pon., 27 sie 2018 o 10:23 Chesnay Schepler <[hidden email]> napisał(a):
The null check in the method is the general-purpose way of solving it.
If the ObjectMapper is thread-safe you could also initialize it as a static field.

On 26.08.2018 17:58, Dominik Wosiński wrote:
Hey, 

I was wondering how do You normally deal with fields that contain references that are not serializable. Say, we have a custom serialization schema in Java that needs to serialize LocalDateTime field with ObjectMapper.  This requires registering specific module for ObjectMapper and this makes it not serializable (module contains some references to classes that are not serializable). 
Now, if You would initialize ObjectMapper directly in the field this will cause an exception when deploying the job. 

Normally I would do : 
@Override
public byte[] serialize(Backup backupMessage) {
    if(objectMapper == null) {
        objectMapper = new ObjectMapper().registerModule(new JavaTimeModule());
    }
...
}
But I was wondering whether do You have any prettier option of doing this? 

Thanks,
Dominik.


Reply | Threaded
Open this post in threaded view
|

Re: Dealing with Not Serializable classes in Java

Chesnay Schepler
You don't need RichFunctions for that, you should be able to just do:
private static final ObjectMapper objectMapper =
	new ObjectMapper().registerModule(new JavaTimeModule());
On 27.08.2018 10:28, Dominik Wosiński wrote:
Hey Paul,
Yeah that is possible, but I was asking in terms of serialization schema. So I would really want to avoid RichFunction :)

Best Regards,
Dominik.

pon., 27 sie 2018 o 10:23 Chesnay Schepler <[hidden email]> napisał(a):
The null check in the method is the general-purpose way of solving it.
If the ObjectMapper is thread-safe you could also initialize it as a static field.

On 26.08.2018 17:58, Dominik Wosiński wrote:
Hey, 

I was wondering how do You normally deal with fields that contain references that are not serializable. Say, we have a custom serialization schema in Java that needs to serialize LocalDateTime field with ObjectMapper.  This requires registering specific module for ObjectMapper and this makes it not serializable (module contains some references to classes that are not serializable). 
Now, if You would initialize ObjectMapper directly in the field this will cause an exception when deploying the job. 

Normally I would do : 
@Override
public byte[] serialize(Backup backupMessage) {
    if(objectMapper == null) {
        objectMapper = new ObjectMapper().registerModule(new JavaTimeModule());
    }
...
}
But I was wondering whether do You have any prettier option of doing this? 

Thanks,
Dominik.



Reply | Threaded
Open this post in threaded view
|

Re: Dealing with Not Serializable classes in Java

Dominik Wosiński
Hey ;) 
I have received one response that was sent directly to my email and not to user group :
Hi Dominik,

I think you can put the unserializable fields into RichFunctions and initiate them in the `open` method, so the the fields won’t need to be serialized with the tasks.

Best,
Paul Lam

And my response about RichFunctions was meant for Paul :) 

Pon., 27.08.2018, 10:38 użytkownik Chesnay Schepler <[hidden email]> napisał:
You don't need RichFunctions for that, you should be able to just do:
private static final ObjectMapper objectMapper =
	new ObjectMapper().registerModule(new JavaTimeModule());
On 27.08.2018 10:28, Dominik Wosiński wrote:
Hey Paul,
Yeah that is possible, but I was asking in terms of serialization schema. So I would really want to avoid RichFunction :)

Best Regards,
Dominik.

pon., 27 sie 2018 o 10:23 Chesnay Schepler <[hidden email]> napisał(a):
The null check in the method is the general-purpose way of solving it.
If the ObjectMapper is thread-safe you could also initialize it as a static field.

On 26.08.2018 17:58, Dominik Wosiński wrote:
Hey, 

I was wondering how do You normally deal with fields that contain references that are not serializable. Say, we have a custom serialization schema in Java that needs to serialize LocalDateTime field with ObjectMapper.  This requires registering specific module for ObjectMapper and this makes it not serializable (module contains some references to classes that are not serializable). 
Now, if You would initialize ObjectMapper directly in the field this will cause an exception when deploying the job. 

Normally I would do : 
@Override
public byte[] serialize(Backup backupMessage) {
    if(objectMapper == null) {
        objectMapper = new ObjectMapper().registerModule(new JavaTimeModule());
    }
...
}
But I was wondering whether do You have any prettier option of doing this? 

Thanks,
Dominik.