SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
Sapphire Gimlets* ,[object Object],Robert Cooper,[object Object],ReachCall.com,[object Object],*no onions,[object Object]
Guice,[object Object],Dependency Injection,[object Object],Java Source configuration,[object Object],Convention over configuration,[object Object],Fast,[object Object]
Gin,[object Object],Guice for GWT apps,[object Object],100% Client Side,[object Object],Based on Deferred Binding, so some limitations,[object Object],Fast,[object Object]
Guicevs Spring,[object Object],Spring Config Hell,[object Object],Promise of simplicity,[object Object],Ever expanding config files,[object Object],Lots of subprojects,[object Object],Becomes more brittle, in that it becomes harder to extract code for reuse.,[object Object]
Guicevs Spring,[object Object],Guice,[object Object],Java Source “configuration”,[object Object],Convention over configuration.,[object Object],Annotation based,[object Object],Opposite of Spring in defaults,[object Object],Prefer constructor injection,[object Object],Prefer new instances (“Prototype”) over Singletons,[object Object],Provider<T> interface encourages mixing scopes,[object Object],Type Safe – you got static typing, use it!,[object Object]
Guice 101,[object Object],Basic Annotations,[object Object],@Inject,[object Object],@ImplementedBy/@ProvidedBy,[object Object],@[Scope],[object Object],@Named,[object Object]
Guice 101,[object Object],public class MyClass {,[object Object],    private final MyService service;,[object Object],    @Injectpublic MyClass(finalMyService service){this.service = service;},[object Object],    public String sayHelloToUser(){	return this.service.hello();},[object Object],},[object Object],   @ImplementedBy(MyServiceImpl.class)public interface MyService {     public String hello();},[object Object]
Guice 101,[object Object],@Singleton,[object Object],public class MyServiceImpl implements MyService {,[object Object],    private final Provider<MySessionObject> sessionProvider;,[object Object],    public MyServiceImpl(final Provider<MySessionObject> sessionProvider){,[object Object],this.sessionProvider = sessionProvider;,[object Object],    },[object Object],    @Override,[object Object],    public String hello() {,[object Object],        return "Hello, "+sessionProvider.get().getName() +"!";,[object Object],    },[object Object],},[object Object]
Guice 101,[object Object],import com.google.inject.servlet.SessionScoped;,[object Object],@SessionScoped,[object Object],public class MySessionObject {,[object Object],    private String name;,[object Object],    public String getName(){,[object Object],        return this.name;,[object Object],    },[object Object],    public void setName(String name){,[object Object],this.name = name;,[object Object],    },[object Object],},[object Object]
Guice 101,[object Object],What have we done?,[object Object],MyClass gets a MyService injected.,[object Object],MyService is implemented by MyServiceImpl as a Singleton,[object Object],MyServiceImpl gets a Provider<MySessionObject>,[object Object],The hello() method fetches the Session scoped MySession object, and says Hello!,[object Object]
Guice 101,[object Object],@ImplementedBy provides defaults for any interface (You don’t need to config these if the default is OK),[object Object],Injection is type safe on constructors (Unit tests have obvious requirements),[object Object],Scope annotations (@SessionScoped, @Singleton) provide defaults.,[object Object],Provider<T> hides the scope shift from the Singleton service in a single thread method.,[object Object]
Guice 101,[object Object],Making it work on the web…,[object Object]
Guice 101,[object Object],public class GuiceContextListener extends GuiceServletContextListener {,[object Object],    @Override,[object Object],    protected Injector getInjector() {,[object Object],        return Guice.createInjector(,[object Object],            new Module() {,[object Object],               public void configure(Binder binder) {,[object Object],                  // Oh Wait, we don’t need anything here!,[object Object],                },[object Object],            },[object Object],         }, new ServletModule() {,[object Object],                @Override,[object Object],                protected void configureServlets() {,[object Object],this.serve(“/myPath/*”).with(MyServlet.class);,[object Object],                },[object Object],          },[object Object],    },[object Object],},[object Object]
Guice 101,[object Object],Warning! Overly complicated coming up!,[object Object]
Guice 101,[object Object],@Singleton,[object Object],public class MyServlet extends HttpServlet{,[object Object],    private final Provider<MySessionObject> sessionProvider;,[object Object],    private final MyClassmyClass;,[object Object],    @Inject,[object Object],    public MyServlet(final Provider<MySessionObject> sessionProvider, MyClassmyClass){,[object Object],this.sessionProvider = sessionProvider;,[object Object],this.myClass = myClass;,[object Object],    },[object Object],    @Override,[object Object],    public void doGet(HttpServletRequestreq, HttpServletResponse res) throws IOException {,[object Object],this.sessionProvider.get().setName(req.getParameter("name"));,[object Object],res.getWriter().println(myClass.hello());,[object Object],    },[object Object],},[object Object]
Guice 101,[object Object],So this is interesting. What happened there?,[object Object],The SessionScoped object was created, and set on the session.,[object Object],MyClass was created one off for injection into the servlet. Since it wasn’t a Provider<MyClass> it was implicitly @Singleton with the servlet,[object Object],But since the MyClass implementation used a provider, it ended up performing a singleton-session scoped op.,[object Object]
Guice 101,[object Object],What else?,[object Object],Servlets, Filters, etc must always be @Singleton of course, this just makes sense.,[object Object],They can *still* get anything injected into them.,[object Object],You need to add your boostrapGuiceContextListener to your web.xml,[object Object],For Servlet < 3.0 you need to add a com.google.inject.servlet.GuiceFilter to /*,[object Object]
Guice 201,[object Object],Why does this rock? (Hint GWT stuff…) ,[object Object],Can you say RemoteServiceServlet?,[object Object],No more calls to getThreadLocalX() for servlet context stuff. Just use Provider<T>,[object Object]
Guice 201: Warp,[object Object],The Warp-* projects provide a lot of utility ops for Guice:,[object Object],@Transactional scope,[object Object],Transaction per Request,[object Object],Some stuff not dissimilar to Spring WebFlow or Stripes.,[object Object]
Guice 201: More Config,[object Object],@Named lets you provide named values in your configuration. (You can also create custom annotations),[object Object],You can also use @Provides for factory methods in your modules for simple providers,[object Object],@Provides ,[object Object],public Connection getConnection(@Named(“jdbc-url”) String jdbcUrl) {,[object Object],DriverManager.forName(whatever);,[object Object],DriverManager.getConnection(jdbcUrl);,[object Object],},[object Object]
Guice 201: More Config,[object Object],binder.bind(String.class).annotatedWith(Names.named(“jdbc-url”)).toInstance(“jdbc:mysql://localhost/mydb”);,[object Object],Note: @Provides methods could do JNDI lookups, or get other stuff. (This is a stupid example!),[object Object]
Of Junipers and Bathtubs,[object Object],Gin is Google Guice for GWT client side apps.,[object Object],Based on DeferrredBinding.,[object Object],Certain features lost:,[object Object],Binding .toInstance() on any module,[object Object],Anonymous Provider<T> can’t be done (@Provides is *kinda* OK),[object Object],Scoping needs to be by hard class reference.,[object Object]
Of Junipers and Bathtubs,[object Object],That is.. in(Singleton.class) not .asEagerSingleton() or with @Singleton,[object Object],Gin seems both stupid and too smart.,[object Object],Binding a RemoteServiceAsync class works out of the box…,[object Object],Unless you want to do @Provides,[object Object],Gin created classes are new Class() not GWT.create(Class.class); -- except for RemoteServiceAsync, which is a special scope.,[object Object]
Gin 101,[object Object],@GinModules(MyGinModule.class),[object Object],public interface Injector extends Ginjector {,[object Object],    public static final Injector INSTANCE = GWT.create(Injector.class);,[object Object],    public MyStartupClassstartupClass();,[object Object],},[object Object],public classMyGinModuleextends AbstractGinModule {,[object Object],    @Override,[object Object],    protected void configure() {,[object Object],this.bind(Resources.class),[object Object],            .toProvider(ResourcesProvider.class),[object Object],            .in(Singleton.class),[object Object],    },[object Object],},[object Object],public static class ResourcesProvider implements Provider<Resources> {,[object Object],     @Override,[object Object],     public Resources get() {,[object Object],            return GWT.create(Resources.class);,[object Object],     },[object Object],},[object Object]
Gin 101,[object Object],Does this step on the toes of DeBi? ,[object Object],OK, maybe a little bit. Sure you could do a singleton Resources.INSTANCE but injection makes Unit testing without dropping into GWTTestCase more frequent. (Read: much, much faster),[object Object],This reserves DeBi for what it is best for: local environment specific code.,[object Object]
Gin 201,[object Object],What can’t you do with Gin?,[object Object],Remember your Injector.INSTANCE is compile-time:,[object Object],No “toInstance()” bindings… ever.,[object Object],No “toProvider(AnonymousProvider(){})” providers need to be public scoped static classes at the least.,[object Object],Gin treats RemoteServiceAsync specially. You can do a provider, but if you try @Provides methods in your GinModule classes, you will get a duplicate declaration error.,[object Object]
Gin 201,[object Object],All this aside, stacked with DeBi, Gin can rock rough and stuff with its Afro Puffs.,[object Object],Replace your Startup call with a Sync method.,[object Object],Replace your Async classes with thing that talk to local storage.,[object Object],Automagically retry onFailure() methods on network errors while your uses if offline.,[object Object]
Way way more,[object Object],Warp-* is some great stuff:,[object Object],http://code.google.com/p/warp-persist/,[object Object],http://code.google.com/p/google-sitebricks/,[object Object],Guice with JAX-WShttps://jax-ws-commons.dev.java.net/guice/,[object Object],(Strangely harder than JAX-RS),[object Object]

Weitere ähnliche Inhalte

Was ist angesagt?

End to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux SagaEnd to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux SagaBabacar NIANG
 
Advanced VCL: how to use restart
Advanced VCL: how to use restartAdvanced VCL: how to use restart
Advanced VCL: how to use restartFastly
 
Is writing performant code too expensive?
Is writing performant code too expensive? Is writing performant code too expensive?
Is writing performant code too expensive? Tomasz Kowalczewski
 
Design & Performance - Steve Souders at Fastly Altitude 2015
Design & Performance - Steve Souders at Fastly Altitude 2015Design & Performance - Steve Souders at Fastly Altitude 2015
Design & Performance - Steve Souders at Fastly Altitude 2015Fastly
 
Avoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promisesAvoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promisesAnkit Agarwal
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCLFastly
 
Hacking the Mesh: Extending Istio with WebAssembly Modules | DevNation Tech Talk
Hacking the Mesh: Extending Istio with WebAssembly Modules | DevNation Tech TalkHacking the Mesh: Extending Istio with WebAssembly Modules | DevNation Tech Talk
Hacking the Mesh: Extending Istio with WebAssembly Modules | DevNation Tech TalkRed Hat Developers
 
Data Loading Made Easy with Mike Nakhimovich DroidCon Italy 2017
Data Loading Made Easy with Mike Nakhimovich DroidCon Italy 2017Data Loading Made Easy with Mike Nakhimovich DroidCon Italy 2017
Data Loading Made Easy with Mike Nakhimovich DroidCon Italy 2017Mike Nakhimovich
 
Sane Sharding with Akka Cluster
Sane Sharding with Akka ClusterSane Sharding with Akka Cluster
Sane Sharding with Akka Clustermiciek
 
Java EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJava EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJiayun Zhou
 
OSGi Puzzlers - Neil Bartlett & Peter Kriens
OSGi Puzzlers - Neil Bartlett & Peter KriensOSGi Puzzlers - Neil Bartlett & Peter Kriens
OSGi Puzzlers - Neil Bartlett & Peter Kriensmfrancis
 
Martin Anderson - threads v actors
Martin Anderson - threads v actorsMartin Anderson - threads v actors
Martin Anderson - threads v actorsbloodredsun
 
Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...
Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...
Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...EPAM_Systems_Bulgaria
 
Provisioning with OSGi Subsystems and Repository using Apache Aries and Felix
Provisioning with OSGi Subsystems and Repository using Apache Aries and FelixProvisioning with OSGi Subsystems and Repository using Apache Aries and Felix
Provisioning with OSGi Subsystems and Repository using Apache Aries and FelixDavid Bosschaert
 
Altitude NY 2018: Programming the edge workshop
Altitude NY 2018: Programming the edge workshopAltitude NY 2018: Programming the edge workshop
Altitude NY 2018: Programming the edge workshopFastly
 
Swift on Raspberry Pi
Swift on Raspberry PiSwift on Raspberry Pi
Swift on Raspberry PiSally Shepard
 

Was ist angesagt? (20)

End to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux SagaEnd to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux Saga
 
Advanced VCL: how to use restart
Advanced VCL: how to use restartAdvanced VCL: how to use restart
Advanced VCL: how to use restart
 
Is writing performant code too expensive?
Is writing performant code too expensive? Is writing performant code too expensive?
Is writing performant code too expensive?
 
Design & Performance - Steve Souders at Fastly Altitude 2015
Design & Performance - Steve Souders at Fastly Altitude 2015Design & Performance - Steve Souders at Fastly Altitude 2015
Design & Performance - Steve Souders at Fastly Altitude 2015
 
Avoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promisesAvoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promises
 
Enterprise Java Puzzlers
Enterprise Java PuzzlersEnterprise Java Puzzlers
Enterprise Java Puzzlers
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCL
 
Hacking the Mesh: Extending Istio with WebAssembly Modules | DevNation Tech Talk
Hacking the Mesh: Extending Istio with WebAssembly Modules | DevNation Tech TalkHacking the Mesh: Extending Istio with WebAssembly Modules | DevNation Tech Talk
Hacking the Mesh: Extending Istio with WebAssembly Modules | DevNation Tech Talk
 
Data Loading Made Easy with Mike Nakhimovich DroidCon Italy 2017
Data Loading Made Easy with Mike Nakhimovich DroidCon Italy 2017Data Loading Made Easy with Mike Nakhimovich DroidCon Italy 2017
Data Loading Made Easy with Mike Nakhimovich DroidCon Italy 2017
 
Sane Sharding with Akka Cluster
Sane Sharding with Akka ClusterSane Sharding with Akka Cluster
Sane Sharding with Akka Cluster
 
Celery
CeleryCelery
Celery
 
Java EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJava EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSF
 
OSGi Puzzlers - Neil Bartlett & Peter Kriens
OSGi Puzzlers - Neil Bartlett & Peter KriensOSGi Puzzlers - Neil Bartlett & Peter Kriens
OSGi Puzzlers - Neil Bartlett & Peter Kriens
 
Martin Anderson - threads v actors
Martin Anderson - threads v actorsMartin Anderson - threads v actors
Martin Anderson - threads v actors
 
Rxjs marble-testing
Rxjs marble-testingRxjs marble-testing
Rxjs marble-testing
 
Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...
Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...
Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...
 
Hands on: Hystrix
Hands on: HystrixHands on: Hystrix
Hands on: Hystrix
 
Provisioning with OSGi Subsystems and Repository using Apache Aries and Felix
Provisioning with OSGi Subsystems and Repository using Apache Aries and FelixProvisioning with OSGi Subsystems and Repository using Apache Aries and Felix
Provisioning with OSGi Subsystems and Repository using Apache Aries and Felix
 
Altitude NY 2018: Programming the edge workshop
Altitude NY 2018: Programming the edge workshopAltitude NY 2018: Programming the edge workshop
Altitude NY 2018: Programming the edge workshop
 
Swift on Raspberry Pi
Swift on Raspberry PiSwift on Raspberry Pi
Swift on Raspberry Pi
 

Andere mochten auch

Bombay Sapphire's Most Imaginative Bartender
Bombay Sapphire's Most Imaginative BartenderBombay Sapphire's Most Imaginative Bartender
Bombay Sapphire's Most Imaginative BartenderMajor Brands
 
Neon response to bombay sapphire pitch 18.07.12 final
Neon response to bombay sapphire pitch 18.07.12 finalNeon response to bombay sapphire pitch 18.07.12 final
Neon response to bombay sapphire pitch 18.07.12 finalNick Cunningham
 
Nelsons Gin Brochure (low res) [395909]
Nelsons Gin Brochure (low res) [395909]Nelsons Gin Brochure (low res) [395909]
Nelsons Gin Brochure (low res) [395909]Greg Kimber
 

Andere mochten auch (6)

Bombay Sapphire's Most Imaginative Bartender
Bombay Sapphire's Most Imaginative BartenderBombay Sapphire's Most Imaginative Bartender
Bombay Sapphire's Most Imaginative Bartender
 
Neon response to bombay sapphire pitch 18.07.12 final
Neon response to bombay sapphire pitch 18.07.12 finalNeon response to bombay sapphire pitch 18.07.12 final
Neon response to bombay sapphire pitch 18.07.12 final
 
Nelsons Gin Brochure (low res) [395909]
Nelsons Gin Brochure (low res) [395909]Nelsons Gin Brochure (low res) [395909]
Nelsons Gin Brochure (low res) [395909]
 
RUM AND GIN
RUM AND GINRUM AND GIN
RUM AND GIN
 
Gin
GinGin
Gin
 
Gin
GinGin
Gin
 

Ähnlich wie Guice gin

Enterprise Guice 20090217 Bejug
Enterprise Guice 20090217 BejugEnterprise Guice 20090217 Bejug
Enterprise Guice 20090217 Bejugrobbiev
 
Jug Guice Presentation
Jug Guice PresentationJug Guice Presentation
Jug Guice PresentationDmitry Buzdin
 
Thomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalThomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalDroidcon Berlin
 
Das kannste schon so machen
Das kannste schon so machenDas kannste schon so machen
Das kannste schon so machenAndré Goliath
 
Cassandra Day NY 2014: Getting Started with the DataStax C# Driver
Cassandra Day NY 2014: Getting Started with the DataStax C# DriverCassandra Day NY 2014: Getting Started with the DataStax C# Driver
Cassandra Day NY 2014: Getting Started with the DataStax C# DriverDataStax Academy
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotationjavatwo2011
 
OSGi Enterprise R6 specs are out! - David Bosschaert & Carsten Ziegeler
OSGi Enterprise R6 specs are out! - David Bosschaert & Carsten ZiegelerOSGi Enterprise R6 specs are out! - David Bosschaert & Carsten Ziegeler
OSGi Enterprise R6 specs are out! - David Bosschaert & Carsten Ziegelermfrancis
 
Google Web Toolkits
Google Web ToolkitsGoogle Web Toolkits
Google Web ToolkitsYiguang Hu
 
SCWCD : Thread safe servlets : CHAP : 8
SCWCD : Thread safe servlets : CHAP : 8SCWCD : Thread safe servlets : CHAP : 8
SCWCD : Thread safe servlets : CHAP : 8Ben Abdallah Helmi
 
Design Patterns - Part 1 of 2
Design Patterns - Part 1 of 2Design Patterns - Part 1 of 2
Design Patterns - Part 1 of 2Savio Sebastian
 
Getting Started with Datatsax .Net Driver
Getting Started with Datatsax .Net DriverGetting Started with Datatsax .Net Driver
Getting Started with Datatsax .Net DriverDataStax Academy
 
谷歌 Scott-lessons learned in testability
谷歌 Scott-lessons learned in testability谷歌 Scott-lessons learned in testability
谷歌 Scott-lessons learned in testabilitydrewz lin
 
CDI Telco Framework & Arquillian presentation at Mobicents Summit, Sochi 2011
CDI Telco Framework & Arquillian presentation at Mobicents Summit, Sochi 2011CDI Telco Framework & Arquillian presentation at Mobicents Summit, Sochi 2011
CDI Telco Framework & Arquillian presentation at Mobicents Summit, Sochi 2011telestax
 
06 response-headers
06 response-headers06 response-headers
06 response-headerssnopteck
 

Ähnlich wie Guice gin (20)

Enterprise Guice 20090217 Bejug
Enterprise Guice 20090217 BejugEnterprise Guice 20090217 Bejug
Enterprise Guice 20090217 Bejug
 
Jug Guice Presentation
Jug Guice PresentationJug Guice Presentation
Jug Guice Presentation
 
Thomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalThomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-final
 
Devoxx 2012 (v2)
Devoxx 2012 (v2)Devoxx 2012 (v2)
Devoxx 2012 (v2)
 
GWT MVP Case Study
GWT MVP Case StudyGWT MVP Case Study
GWT MVP Case Study
 
Das kannste schon so machen
Das kannste schon so machenDas kannste schon so machen
Das kannste schon so machen
 
GWT Extreme!
GWT Extreme!GWT Extreme!
GWT Extreme!
 
Cassandra Day NY 2014: Getting Started with the DataStax C# Driver
Cassandra Day NY 2014: Getting Started with the DataStax C# DriverCassandra Day NY 2014: Getting Started with the DataStax C# Driver
Cassandra Day NY 2014: Getting Started with the DataStax C# Driver
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotation
 
Guice
GuiceGuice
Guice
 
Guice
GuiceGuice
Guice
 
OSGi Enterprise R6 specs are out! - David Bosschaert & Carsten Ziegeler
OSGi Enterprise R6 specs are out! - David Bosschaert & Carsten ZiegelerOSGi Enterprise R6 specs are out! - David Bosschaert & Carsten Ziegeler
OSGi Enterprise R6 specs are out! - David Bosschaert & Carsten Ziegeler
 
guice-servlet
guice-servletguice-servlet
guice-servlet
 
Google Web Toolkits
Google Web ToolkitsGoogle Web Toolkits
Google Web Toolkits
 
SCWCD : Thread safe servlets : CHAP : 8
SCWCD : Thread safe servlets : CHAP : 8SCWCD : Thread safe servlets : CHAP : 8
SCWCD : Thread safe servlets : CHAP : 8
 
Design Patterns - Part 1 of 2
Design Patterns - Part 1 of 2Design Patterns - Part 1 of 2
Design Patterns - Part 1 of 2
 
Getting Started with Datatsax .Net Driver
Getting Started with Datatsax .Net DriverGetting Started with Datatsax .Net Driver
Getting Started with Datatsax .Net Driver
 
谷歌 Scott-lessons learned in testability
谷歌 Scott-lessons learned in testability谷歌 Scott-lessons learned in testability
谷歌 Scott-lessons learned in testability
 
CDI Telco Framework & Arquillian presentation at Mobicents Summit, Sochi 2011
CDI Telco Framework & Arquillian presentation at Mobicents Summit, Sochi 2011CDI Telco Framework & Arquillian presentation at Mobicents Summit, Sochi 2011
CDI Telco Framework & Arquillian presentation at Mobicents Summit, Sochi 2011
 
06 response-headers
06 response-headers06 response-headers
06 response-headers
 

Mehr von Robert Cooper

Mehr von Robert Cooper (6)

What's New in Android
What's New in AndroidWhat's New in Android
What's New in Android
 
Android 3
Android 3Android 3
Android 3
 
GWT is Smarter Than You
GWT is Smarter Than YouGWT is Smarter Than You
GWT is Smarter Than You
 
Android Froyo
Android FroyoAndroid Froyo
Android Froyo
 
Extreme Source Compatibility
Extreme Source CompatibilityExtreme Source Compatibility
Extreme Source Compatibility
 
GWT 2 Is Smarter Than You
GWT 2 Is Smarter Than YouGWT 2 Is Smarter Than You
GWT 2 Is Smarter Than You
 

Kürzlich hochgeladen

Building AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxBuilding AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxUdaiappa Ramachandran
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Brian Pichman
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsSafe Software
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfJamie (Taka) Wang
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024D Cloud Solutions
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintMahmoud Rabie
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-pyJamie (Taka) Wang
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
Linked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesLinked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesDavid Newbury
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxGDSC PJATK
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?IES VE
 

Kürzlich hochgeladen (20)

Building AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxBuilding AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptx
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )
 
20230104 - machine vision
20230104 - machine vision20230104 - machine vision
20230104 - machine vision
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024
 
201610817 - edge part1
201610817 - edge part1201610817 - edge part1
201610817 - edge part1
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership Blueprint
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-py
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
Linked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesLinked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond Ontologies
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptx
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?
 

Guice gin

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.