In a more direct question, do agents instances need to be serializable?

On Thu, Jun 22, 2017 at 7:16 PM, Lucas Berri Cristofolini <
[email protected]> wrote:

> So we've hit a few problems with our original design, and we're discussing
> ideas for a possible alternative.
>
> When reading the documentation on akka actors and props (
> http://doc.akka.io/docs/akka/current/scala/actors.html#crea
> ting-actors-with-props) one question came to mind regarding the following
> statement about the ActorRef type:
>
> "The ActorRef is also serializable and network-aware. This means that you
> can serialize it, send it over the wire and use it on a remote host and it
> will still be representing the same Actor on the original node, across the
> network."
>
> Do you guys happen to know if that means that the ActorRef is serializable
> and wherever it is used, will ALWAYS point to the original Actor, running
> on its original JVM, or, is it possible that it would be used to create
> another instance of the Actor, in another completely separate JVM?
>
> Cheers!
> Lucas
>
> On Sat, Jun 17, 2017 at 3:12 PM, Lucas Berri Cristofolini <
> [email protected]> wrote:
>
>> Good catch. Seems that not much needs to be changed... I think simply
>> adding the Spring extension to the ActorSystem config should do the trick.
>>
>> While that GitHub example I mentioned does use Spring to set the
>> ActorSystem dependencies, I don't see that as being very useful for us
>> right now, since we'd only use Spring for Actor-specific dependencies.
>>
>> If using Spring for the ActorSystem is interesting to the project as a
>> whole, we could consider making some changes to make that work...
>>
>> I'll keep working on this as is for now. Let me know what you guys think
>> about the ActorSystem idea.
>>
>> Cheers,
>> Lucas
>>
>> On Fri, Jun 16, 2017 at 7:45 PM, Barbara Malta Gomes <
>> [email protected]> wrote:
>>
>>> I might be wrong, but in order to use Akka with Spring, dont we need to
>>> also change the way the ActorSystem is being instantiated on Fey?
>>>
>>> On Fri, Jun 16, 2017 at 12:39 PM, Lucas Berri Cristofolini <
>>> [email protected]> wrote:
>>>
>>>> So after a while pondering and going back and forth between a few
>>>> possible implementations, I think we're on to something interesting.
>>>>
>>>> Let me try and give you guys an outline of the design we came up with:
>>>>
>>>>    - Create an Akka extension that will load the Spring context, as
>>>>    shown here -> https://github.com/typesafehub
>>>>    /activator-akka-java-spring
>>>>    - Implement an ActorProducer that will then instatiate the actors,
>>>>    as shown here -> http://doc.akka.io/docs/akka/c
>>>>    urrent/scala/actors.html#dependency-injection
>>>>    
>>>> <http://doc.akka.io/docs/akka/current/scala/actors.html#dependency-injection>
>>>>    - Modify "Orchestration.scala" to add an alternative
>>>>    "CreateEnsemble" method which will use the Spring extension when 
>>>> specified
>>>>    - Modify "FeyCore.scala" by adding two possible fields to be
>>>>    interpreted from the orchestration JSON. One to specify that the 
>>>> performers
>>>>    within that orchestration will be using Spring (so that we can call the
>>>>    alternate method mentioned above); and another one specifying the path 
>>>> for
>>>>    the Spring context file
>>>>    - Modify the JSON validator to reflect these changes.
>>>>
>>>>
>>>> This should keep the fey core generic, as we mentioned before, not
>>>> making using Spring mandatory.
>>>>
>>>> Let me know what you guys think!
>>>>
>>>> Cheers,
>>>> Lucas
>>>>
>>>> On Tue, Jun 6, 2017 at 1:03 PM, Barbara <[email protected]>
>>>> wrote:
>>>>
>>>>> That sounds good.
>>>>>
>>>>> Thank you Lucas.
>>>>>
>>>>> Looking forward for the out coming results.
>>>>>
>>>>> This new feature will be a good fit for The Fey Engine.
>>>>>
>>>>> Regards,
>>>>>
>>>>> Barbara Gomes
>>>>> +1 (650) 713-6092 <(650)%20713-6092>
>>>>>
>>>>> On Jun 6, 2017, at 8:42 AM, Lucas Berri Cristofolini <
>>>>> [email protected]> wrote:
>>>>>
>>>>> I think using the Akka dependency injection system is a good starting
>>>>> point. It should be sufficient for our needs and shouldn't take too long 
>>>>> to
>>>>> get it working.
>>>>>
>>>>> I'll try to get something up and running and report back. Once we get
>>>>> it going maybe we can discuss a feature proposal and eventually even
>>>>> bringing full spring integration to the fey core.
>>>>>
>>>>> Cheers!
>>>>> Lucas
>>>>>
>>>>> On Mon, Jun 5, 2017 at 3:21 PM, Barbara Malta Gomes <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hi there,
>>>>>>
>>>>>> I'm not very familiar with the Spring framework.
>>>>>> I spent sometime reading about it and how it would integrate into Fey
>>>>>> (Akka).
>>>>>>
>>>>>> Correct if I'm misunderstood:
>>>>>>
>>>>>> *@Rafael *is suggesting the complete integration of the Spring
>>>>>> framework into Fey. Which would be a bit more complex, since Fey would 
>>>>>> have
>>>>>> to instantiate the Spring context and the Actor System would also have to
>>>>>> be instantiated using the Spring context. Which would imply that all the
>>>>>> necessary configuration for the Spring framework would have to be defined
>>>>>> upon Fey start-up (fey.conf file maybe).
>>>>>>
>>>>>> *@Lucas *is suggesting that we use the built-in dependency injection
>>>>>> that Akka offers. This approach sounds simpler than the Spring 
>>>>>> integration,
>>>>>> and would also keep the "Generic" idea of Fey, where the developer should
>>>>>> be able to use any framework he wants to.
>>>>>>
>>>>>> I personally think that it would be awesome if we could work on both
>>>>>> approaches. Here are my reasons:
>>>>>>
>>>>>>    1. Spring is a fairly complex framework, and having it integrated
>>>>>>    on Fey core would be a huge plus and would also offer a more 
>>>>>> sophisticated
>>>>>>    dependency injection framework.
>>>>>>    2. Using the built-in Akka dependency injection would be cool as
>>>>>>    well, since it seems way simpler to use and understand, and 
>>>>>> developers that
>>>>>>    are not familiar with the Spring framework (like me) would not have a 
>>>>>> hard
>>>>>>    time integrating it into the performers world.
>>>>>>
>>>>>> For both approaches, we would have to do some research and present an
>>>>>> Integration idea into Fey.
>>>>>>
>>>>>> Perhaps we could start working on the proposal for *@Lucas *suggestions
>>>>>> first? What do you guys think?
>>>>>>
>>>>>> *Just as a heads-up:* Unfortunately, Fey still have some class load
>>>>>> issues when the performer's dependencies are fairly complex. As an 
>>>>>> example,
>>>>>> we wrote an Apache Ignite performer and we had to go to some hoops to get
>>>>>> the Spring dependencies loaded in runtime, in fact, the final fix was to
>>>>>> manually add the dependency to the Fey Application when starting Fey, on
>>>>>> the run command (java -jar ...). Although it was a simple fix, it would 
>>>>>> be
>>>>>> nice to not have to do it anymore.
>>>>>>
>>>>>> Looking forward to hear your thoughts.
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>>
>>>>>> On Sun, Jun 4, 2017 at 12:44 PM, Lucas Berri Cristofolini <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> I've been reading up on how Akka would handle dependency injection (
>>>>>>> http://doc.akka.io/docs/akka/current/scala/actors.html#depe
>>>>>>> ndency-injection), and it seems that, as far as Akka is concerned,
>>>>>>> upon creating an Actor, we could pass a DependencyInjector and an
>>>>>>> ApplicationContext within the actor's Props.
>>>>>>>
>>>>>>> So now I'm imagining that bringing this functionality to Fey would
>>>>>>> be a simple matter of adding a few extra items (the DependencyInjector
>>>>>>> class and the ApplicationContext) to the json that defines an
>>>>>>> orchestration, and once the json is processed, verifying if those items 
>>>>>>> are
>>>>>>> present, and adding those to the Props before calling akka to instance 
>>>>>>> the
>>>>>>> actor.
>>>>>>>
>>>>>>> Still, I'm curious to see what you guys think about bringing this
>>>>>>> feature to the fey-engine.
>>>>>>>
>>>>>>> On Sun, Jun 4, 2017 at 1:21 PM, Rafael Weingärtner <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> We started developing our first agents (performers) using Fey, and
>>>>>>>> we found our first “problem”. There is no integration of Fey and 
>>>>>>>> Spring.
>>>>>>>> Or at least, we did not understand how to integrate Fey with Spring.
>>>>>>>>
>>>>>>>> We want to instantiate our agents in Spring to enjoy all of its
>>>>>>>> benefits (e.g. dependency injection, object management, easy 
>>>>>>>> transaction
>>>>>>>> configuration and so forth). Therefore, instead of telling Fey the
>>>>>>>> performer class to instantiate, we would have to tell Fey the source 
>>>>>>>> as the
>>>>>>>> application context name and the bean name; so Fey can retrieve the 
>>>>>>>> agent
>>>>>>>> (object) already instantiated by Spring.
>>>>>>>>
>>>>>>>> This would have consequences on the performer constructor; we would
>>>>>>>> need to add another hook to configure an agent in Fey such as a
>>>>>>>> post-constructor method that would be intended to do the same as the
>>>>>>>> constructor today. I mean, we maintain everything we have so far, and 
>>>>>>>> we
>>>>>>>> add only a default constructor with no parameters and the 
>>>>>>>> post-constructor
>>>>>>>> method that would be hooked in Fey’s performer life-cycle.
>>>>>>>>
>>>>>>>> Then, we would have to possibilities, first the one we already have
>>>>>>>> to instantiate an agent:
>>>>>>>>
>>>>>>>>  "source": {
>>>>>>>>
>>>>>>>>             "name": *"agentJarWithDependencies.jar"*,
>>>>>>>>
>>>>>>>>             "classPath": *"org.awesomeCompany.agentOne"*,
>>>>>>>>
>>>>>>>>             "parameters": {
>>>>>>>>
>>>>>>>>             }
>>>>>>>>
>>>>>>>> And an alternative for agent objects managed by Spring:
>>>>>>>>
>>>>>>>> "source": {
>>>>>>>>
>>>>>>>>             "name": *" agentJarWithDependencies.jar"*,
>>>>>>>>
>>>>>>>>             "applicationContextName":
>>>>>>>> *"agentOneApplicationContext.xml"*,
>>>>>>>>
>>>>>>>>             "performerBeanName": *"agentOneApplicationContext.xml"*
>>>>>>>>
>>>>>>>>
>>>>>>>> This would require Fey to instantiate the Spring’s application
>>>>>>>> context, and then look the bean up there. The idea is that application
>>>>>>>> context file can be found in the classpath.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> What do you guys think about this? We can work to create this
>>>>>>>> integration after we discussed the changes that would be applied to 
>>>>>>>> Fey.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Rafael Weingärtner
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Barbara Gomes
>>>>>> Computer Engineer
>>>>>> San Jose, CA
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> Barbara Gomes
>>> Computer Engineer
>>> San Jose, CA
>>>
>>
>>
>


-- 
Rafael Weingärtner

Reply via email to