Hi Jack,
Stephan is right, this should work. Unfortunately the TypeAnalyzer does not
correctly detect that it cannot treat your Id class as a Pojo. I will add a
Jira issue for that. For the time being you can use this command to force
the system to use Kryo:

env.getConfig.enableForceKryo();

I hope this helps.

Regards,
Aljoscha


On Wed, 23 Sep 2015 at 13:37 Stephan Ewen <se...@apache.org> wrote:

> Hi Jack!
>
> This should be supported, there is no strict requirement for mutable types.
>
> The POJO rules apply only if you want to use the "by-field-name"
> addressing for keys. In Scala, you should be able to use case classes as
> well, even if they are immutable.
>
> Can you post the exception that you get?
>
> Greetings,
> Stephan
>
>
> On Wed, Sep 23, 2015 at 1:29 PM, Jack <jack-kn...@marmelandia.com> wrote:
>
>> Hi,
>>
>> I'm having trouble integrating existing Scala code with Flink, due to
>> POJO-only requirement.
>>
>> We're using AnyVal heavily for type safety, and immutable classes as a
>> default. For example, the following does not work:
>>
>> object Test {
>>   class Id(val underlying: Int) extends AnyVal
>>
>>   class X(var id: Id) {
>>     def this() { this(new Id(0)) }
>>   }
>>
>>   class MySource extends SourceFunction[X] {
>>     def run(ctx: SourceFunction.SourceContext[X]) {
>>       ctx.collect(new X(new Id(1)))
>>     }
>>     def cancel() {}
>>   }
>>
>>   def main(args: Array[String]) {
>>     val env = StreamExecutionContext.getExecutionContext
>>     env.addSource(new MySource).print
>>     env.execute("Test")
>>   }
>> }
>>
>> Currently I'm thinking that I would need to have duplicate classes and
>> code for Flint and for non-Flint code, or somehow use immutable interfaces
>> for non-Flint code. Both ways are expensive in terms of development time.
>>
>> Would you have any guidance on how to integrate Flink with a code base
>> that has immutability as a norm?
>>
>> Thanks
>
>
>

Reply via email to