pivot-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Karel Hübl (JIRA) <j...@apache.org>
Subject [jira] [Commented] (PIVOT-885) Add support for dependecy injection
Date Tue, 12 Feb 2013 18:41:13 GMT

    [ https://issues.apache.org/jira/browse/PIVOT-885?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13576872#comment-13576872

Karel Hübl commented on PIVOT-885:

I made prototype of simple java (client) to java (server) RMI using HTTP. This mades me reimplement
DI to be usable on server side and independent on Pivot collections. 

Change in dependency injection and BeanFactory

The main change is, change of BeanInjector.injectDependencies method signature. Instead of
passing Pivot namespace as parameter (the only dependency on Pivot collections), InjectorEventDispatcher
is passed. 
InjectorEventDispatcher enables registration of InjectionListers. This is used by InjectionSerialiser
(deployed only on client) to add injected properties to namespace.

Transparent service invocation and RMI

Business logic is typically implemented by service layer. Business layer interface should
be represented by set of service interfaces. In enterprise environment, I believe, pivot is
targeted as GUI for thin clients, so implementation of service layer is deployed on server
(typically J2EE). In development phase it may be usefull to not depend on server part (use
mock services) or do not wait for redeployment of server layer.  And sometimes we may want
to implement thick clients.  So our Pivot App should depend on service interfaces - and service
implementation may be injected in runtime based on configuration. The provided implementation
may be mock, service instance or service delegate instance handling RMI.

I propose @Service annotation to mark fields for injection of services. RemoteServiceProxyFactory
is prototype of ServiceFactory providing dynamic service delegate proxies handling RMI of
services on J2EE server over HTTP. RMIServlet can be used as prototype endpoint.

I am attachinng my proposals to extend Pivot in above areas in attached archived eclipse projects.
There is very simple Pivot application demonstrating proposed features in extensions-sample.zip.
In extensions-sample-client\src\org\apache\pivot\extensionsSample\launcher are executable
launchers with diferent configs (mock, local, dynamic service delegate proxy).

> Add support for dependecy injection
> -----------------------------------
>                 Key: PIVOT-885
>                 URL: https://issues.apache.org/jira/browse/PIVOT-885
>             Project: Pivot
>          Issue Type: New Feature
>            Reporter: Karel Hübl
>            Assignee: Sandro Martini
>             Fix For: 2.1
>         Attachments: extensions-sample.zip, pivot-extensions.zip
> As pivot application devoloper, I would like to have support for dependency injection
in Pivot. My requirements are:
> - support for field injection (at least)
> - support for @PostConstruct methods
> - support for @RuntimeScoped classes - only one instance may be constructed during Runtime.
Usefull when one needs share injected instances.
> - in relevant cases, inject dependencies also into namespace.
> I implemented prototype of this functionality, source codes including unit tests and
sample application are included. The dependency injection is implemented in proposed org.apache.pivot.beans.injection
> Please consider adding this functionality in future Pivot release.

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

View raw message