Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id D2DFE200C1E for ; Fri, 3 Feb 2017 05:23:54 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id D1819160B61; Fri, 3 Feb 2017 04:23:54 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 81E5A160B57 for ; Fri, 3 Feb 2017 05:23:53 +0100 (CET) Received: (qmail 42834 invoked by uid 500); 3 Feb 2017 04:23:52 -0000 Mailing-List: contact dev-help@river.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@river.apache.org Delivered-To: mailing list dev@river.apache.org Received: (qmail 42818 invoked by uid 99); 3 Feb 2017 04:23:51 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 03 Feb 2017 04:23:51 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id 248A8C03A4 for ; Fri, 3 Feb 2017 04:23:51 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 3.744 X-Spam-Level: *** X-Spam-Status: No, score=3.744 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=2, MIME_QP_LONG_LINE=0.001, MISSING_MIMEOLE=1.843] autolearn=disabled Authentication-Results: spamd4-us-west.apache.org (amavisd-new); dkim=pass (1024-bit key) header.d=zeus.net.au Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id yjyRuamT2nWJ for ; Fri, 3 Feb 2017 04:23:44 +0000 (UTC) Received: from server-2g-r4.ipv4.au.syrahost.com (server-2g-r4.ipv4.au.syrahost.com [103.250.215.88]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id 014E65F30D for ; Fri, 3 Feb 2017 04:23:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zeus.net.au ; s=default; h=Content-Type:MIME-Version:Message-ID:To:Subject:From:Date: Sender:Reply-To:Cc:Content-Transfer-Encoding:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=KJk3oOPYDG1sref4cJQvkSZY9lEr59RSZ+bwccoz4WY=; b=k0sLz1KQYBafis1UoVViZXr42B TIInRruQxuo9BZqNu2zLV8Qh2f4wZa4/FwEpA6aT2WNxo776RH42F3EjT/sG26jO1g1SQXzmpysDL GqPMIwvxXMlf+Uub41S4m/it+L9TxEK0hLM3VQTxCccx9ygvKZokvQVMJBr4XPwDzJzI=; Received: from pa49-197-27-252.pa.qld.optusnet.com.au ([49.197.27.252]:54678 helo=[10.79.255.53]) by webcloud66.au.syrahost.com with esmtpsa (TLSv1:ECDHE-RSA-AES256-SHA:256) (Exim 4.87) (envelope-from ) id 1cZVPG-001o8f-H9 for dev@river.apache.org; Fri, 03 Feb 2017 12:23:31 +0800 Date: Fri, 3 Feb 2017 14:23:25 +1000 (AEST) From: Peter Subject: Re: OSGi To: "dev@river.apache.org" Message-ID: <80e4da32902e3730c57be55c1432a796@org.tizen.email> MIME-Version: 1.0 Content-Type: MULTIPART/ALTERNATIVE; BOUNDARY="8323328-923541131-1486095805=:1297" X-Priority: 3 X-MSMail-Priority: Normal X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - webcloud66.au.syrahost.com X-AntiAbuse: Original Domain - river.apache.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - zeus.net.au X-Get-Message-Sender-Via: webcloud66.au.syrahost.com: authenticated_id: jini@zeus.net.au X-Authenticated-Sender: webcloud66.au.syrahost.com: jini@zeus.net.au X-Source: X-Source-Args: X-Source-Dir: archived-at: Fri, 03 Feb 2017 04:23:55 -0000 --8323328-923541131-1486095805=:1297 Content-Type: TEXT/plain; CHARSET=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Thanks Gregg,=0A=0AI realise that Jini may have been a lot more successful = had your experiences with desktop applications been given greater considera= tion.=0A=0AAny thoughts on JavaFX, fxml for serviceui?=0A=0ACriticism had a= lso in the past, been levelled at the lookup service's inability to perform= boolean logic comparisons of Entry fields. =C2=A0Delayed unmarshalling all= ows local Entry comparisons, improved security and a more responsive ui.=0A= =0AI understand why you wouldn't want to "download the internet" (which rea= lly means download transitive dependencies at startup) when a user first op= ens their desktop application, quick start up is important on the desktop. = =C2=A0Less so on the server where run time performance is more important.= =0A=0AI get that you're not prepared to take a backwards step with desktop = start up performance.=0A=0AOSGi support is targeted towards Iot and growing= our developer base, it's a convenient time for me to work on that now, as = I'm working on a modular maven build, but it's still my understanding that = we (River) also intend to continue supporting other developers who don't utilise = OSGi or Maven (Rio users).=0A=0AMaven pulls in a lot of unnecessary transit= ive dependencies (which isn't a problem for a server or build env), OSGi re= duces them by using package dependencies at runtime. =C2=A0Classdep can red= uce the number further to only the class files necessary, but it doesn't su= pport versioning.=0A=0AJigsaw is a modular framework that doesn't use Class= Loaders to manage module visibility but it has no versioning support either= =0A=0AContainers and modularity are developer concerns, but we need to ens= ure this is as easy as possible for developers to implement their chosen de= sign and environment. =C2=A0Right now OSGi is difficult because no one has = written serialization that takes its ClassLoader visibility into account.= =0A=0AOSGi and Maven provide some good tools for automating and simplifying= the build process. =C2=A0Bnd generates manifests automatically with packag= e imports and exports for OSGi and also reads annotations. =C2=A0Modules ce= rtainly make the code easier to read and understand for the maintainer and allows= components that don't change to be released on different timeframes. =C2= =A0The qa test suite is still an ant build, which I'm currently working on = running with the new jar names on the class path (affects test policy file = grants). =C2=A0Clearly tests will need to be written for OSGi.=0A=0AThe TCC= L classloader will continue to work as it always has, when an OSGi framewor= k is not detected.=0A=0AAt the end of the day though, no framework is manda= tory and developers can use classdepandjar to package only the classes need= ed for a client app or proxy into a single jar.=0A=0AThe classdepend librar= y (rewritten internals of classdep that uses asm) could be utilised to crea= te a runtime dependency graph as you suggest (which could be serialized) an= d Jigsaw may yet have a role to play (and I've done some work already to su= pport java 9). =C2=A0The risk with Classdep is, it may not pick up all depe= ndencies in modern bytecode, its only written with consideration for java 6 class files. =C2=A0Jdk 1.9 provides a new tool, jdeps to discover depend= encies and this might be utilised to replace Classdep or its internal imple= mentation in the long term, if someone steps up and takes that on. =C2=A0Cl= assdep has developed a bug in recent times that affects the build (occassio= nally drops deps) and there has been little maintenance on it recently.=0A= =0AOSGi could also determine dependency graphs, however would be OSGi speci= fic (package deps) and I'm not yet certain it's necessary. =C2=A0I also thi= nk that dependency graphs will tend to be a framework concern, whether they= are class, package or module based dependencies they are specific.=0A=0AAt= this time, choosing a specific container or framework for developers to ut= ilise is a non goal, we're just working on better support for deserializati= on in an OSGi framework, because there are visibility problems that the TCC= L can't completely solve for OSGi.=0A=0ANo serialization or Remote method i= nvocation framework currently supports OSGi very well, one that works well and can provide security might gain a lot of new interest from that user= base.=0A=0AA modular River also reduces the api users need to learn to get= started, which makes River easier to learn for Maven or OSGi developers. = =C2=A0In this case they already understand their build tools and probably w= ant to continue using them.=0A=0AIt's a non goal to chose any particular mo= dular ity framework for developers to use at this time.=0A=0ARegards,=0A=0A= Peter.=0A=0ASent from my Samsung device=C2=A0.=0A=C2=A0=0A=C2=A0=C2=A0Inclu= de original message=0A---- Original message ----=0AFrom: Gregg Wonderly =0ASent: 03/02/2017 01:25:35 am=0ATo: dev@river.apache.org=0ASu= bject: Re: OSGi=0A=0AI=C2=A0am=C2=A0a=C2=A0fan=C2=A0of=C2=A0=E2=80=9Cone=C2= =A0jar=E2=80=9D=C2=A0because=C2=A0I=C2=A0get=C2=A0real=C2=A0tired=C2=A0of= =C2=A0spending=C2=A0time=C2=A0=E2=80=9Cpackaging=E2=80=9D=C2=A0when=C2=A0th= e=C2=A0class=C2=A0loading=C2=A0mechanisms=C2=A0already=C2=A0provide=C2=A0= =E2=80=9Csegregation=E2=80=9D.=C2=A0=C2=A0I=C2=A0understand=C2=A0how=C2=A0= =E2=80=9Cpretty=E2=80=9D=C2=A0packaging=C2=A0is=C2=A0and=C2=A0how=C2=A0ever= yone=C2=A0can=C2=A0be=C2=A0completely=C2=A0excited=C2=A0about=C2=A0a=C2=A0c= lean=C2=A0view=C2=A0of=C2=A0dependencies.=C2=A0=C2=A0However,=C2=A0when=C2= =A0I=C2=A0package=C2=A0something=C2=A0that=C2=A0works,=C2=A0I=C2=A0don=E2= =80=99t=C2=A0want=C2=A0to=C2=A0hand=C2=A0someone=C2=A05=C2=A0things.=C2=A0=C2= =A0The=C2=A0=E2=80=9Cjar=E2=80=9D=C2=A0file=C2=A0has=C2=A0been=C2=A0=E2=80= =9Cclick=C2=A0to=C2=A0run=E2=80=9D=C2=A0file=C2=A0type=C2=A0for=C2=A0a=C2= =A0long=C2=A0time.=C2=A0=C2=A0That,=C2=A0for=C2=A0me=C2=A0means=C2=A0that= =C2=A0you=C2=A0should=C2=A0be=C2=A0able=C2=A0to=C2=A0get=C2=A0everything=C2= =A0you=C2=A0need=C2=A0from=C2=A0that=C2=A0jar.=C2=A0=C2=A0The=C2=A0problem= =C2=A0that=C2=A0clickable=C2=A0jar=C2=A0files=C2=A0suffer=C2=A0from,=C2=A0i= s=C2=A0that=C2=A0lack=C2=A0of=C2=A0use=C2=A0of=C2=A0Java=C2=A0for=C2=A0desk= top=C2=A0apps.=C2=A0=C2=A0Instead,=C2=A0the=C2=A0server=C2=A0mentality=C2= =A0of=C2=A010s=C2=A0of=C2=A0jars=C2=A0from=C2=A010s=C2=A0of=C2=A0places,=C2= =A0integration,=C2=A0versioning,=C2=A0etc.,=C2=A0have=C2=A0created=C2=A0the= =C2=A0=E2=80=9Clots=C2=A0of=C2=A0pieces=C2=A0is=C2=A0fine=E2=80=9D=C2=A0vie= wpoint=C2=A0and=C2=A0tooling=C2=A0around=C2=A0that=C2=A0has=C2=A0made=C2=A0= it=C2=A0pretty=C2=A0much=C2=A0impossible=C2=A0to=C2=A0easily=C2=A0create=C2= =A0one=C2=A0jar,=C2=A0without=C2=A0=E2=80=9Ccustom=E2=80=9D=C2=A0packaging.= =0A=0AI=C2=A0like=C2=A0to=C2=A0solve=C2=A0problems=C2=A0once,=C2=A0not=C2= =A0over=C2=A0and=C2=A0over=C2=A0again.=C2=A0=C2=A0We=C2=A0need=C2=A0to=C2= =A0make=C2=A0sure=C2=A0and=C2=A0think=C2=A0about=C2=A0=E2=80=9Ctools=E2=80= =9D=C2=A0that=C2=A0make=C2=A0whatever=C2=A0packaging=C2=A0is=C2=A0decided= =C2=A0on,=C2=A0trivial=C2=A0to=C2=A0create.=C2=A0=C2=A0Think=C2=A0about=C2= =A0using=C2=A0annotations=C2=A0to=C2=A0segregate=C2=A0pieces=C2=A0into=C2= =A0the=C2=A0packages=C2=A0that=C2=A0you=C2=A0want=C2=A0them=C2=A0to=C2=A0be= =C2=A0in.=C2=A0=C2=A0Think=C2=A0about=C2=A0runtime=C2=A0dependency=C2=A0gra= phs=C2=A0being=C2=A0expressible=C2=A0in=C2=A0annotations=C2=A0as=C2=A0well,= =C2=A0so=C2=A0that=C2=A0we=C2=A0might=C2=A0be=C2=A0able=C2=A0to=C2=A0utiliz= e=C2=A0a=C2=A0composite=C2=A0class=C2=A0loader=C2=A0to=C2=A0=E2=80=9Cget=E2= =80=9D=C2=A0dependent=C2=A0jars=C2=A0from=C2=A0an=C2=A0appropriate=C2=A0sou= rce.=C2=A0=C2=A0This=C2=A0would=C2=A0allow=C2=A0great,=C2=A0dynamic=C2=A0bi= nding=C2=A0to=C2=A0occur=C2=A0in=C2=A0the=C2=A0class=C2=A0loader,=C2=A0and= =C2=A0still=C2=A0provide=C2=A0a=C2=A0single=C2=A0class=C2=A0loader=C2=A0vie= w=C2=A0of=C2=A0the=C2=A0context=C2=A0so=C2=A0that=C2=A0TCCL=C2=A0and=C2=A0o= ther=C2=A0parts=C2=A0of=C2=A0the=C2=A0Java=C2=A0runtime=C2=A0will=C2=A0stil= l=C2=A0work=C2=A0in=C2=A0non-jini=C2=A0packages. =0A=0AGregg =0A=0A>=C2=A0O= n=C2=A0Feb=C2=A01,=C2=A02017,=C2=A0at=C2=A07:44=C2=A0PM,=C2=A0Peter=C2=A0=C2=A0wrote: =0A>=C2=A0 =0A>=C2=A0Thanks=C2=A0Gregg, =0A>= =C2=A0 =0A>=C2=A0I=C2=A0think=C2=A0it's=C2=A0necessary=C2=A0to=C2=A0continu= e=C2=A0supporting=C2=A0preferred=C2=A0class=C2=A0loading=C2=A0for=C2=A0thos= e=C2=A0who=C2=A0don't=C2=A0use=C2=A0osgi=C2=A0or=C2=A0maven.=C2=A0=C2=A0Rio= =C2=A0already=C2=A0has=C2=A0a=C2=A0maven=C2=A0class=C2=A0resolver=C2=A0RMIC= lassLoaderSPI=C2=A0implementation.=C2=A0=C2=A0But=C2=A0we=C2=A0also=C2=A0ne= ed=C2=A0to=C2=A0ensure=C2=A0we=C2=A0can=C2=A0still=C2=A0solve=C2=A0the=C2= =A0same=C2=A0problems=C2=A0that=C2=A0preferred=C2=A0class=C2=A0loading=C2= =A0addresses=C2=A0in=C2=A0modular=C2=A0environments. =0A>=C2=A0 =0A>=C2=A0W= e=C2=A0also=C2=A0need=C2=A0to=C2=A0consider=C2=A0how=C2=A0existing=C2=A0imp= lementations=C2=A0can=C2=A0transition=C2=A0to=C2=A0a=C2=A0modular=C2=A0framework,=C2=A0should=C2=A0developers=C2=A0want=C2=A0to. =0A>=C2= =A0 =0A>=C2=A0River=C2=A0/=C2=A0Jini's=C2=A0classdepandjar=C2=A0duplicates= =C2=A0classes=C2=A0in=C2=A0jar=C2=A0files.=C2=A0=C2=A0Maven=C2=A0or=C2=A0OS= Gi=C2=A0modules=C2=A0usually=C2=A0don't. =0A>=C2=A0 =0A>=C2=A0In=C2=A0a=C2= =A0modular=C2=A0version=C2=A0of=C2=A0Gregg's=C2=A0use=C2=A0case=C2=A0scenar= io,=C2=A0the=C2=A0shared=C2=A0Entries=C2=A0wouldn't=C2=A0be=C2=A0included= =C2=A0in=C2=A0the=C2=A0proxy=C2=A0codebase=C2=A0but=C2=A0instead=C2=A0be=C2= =A0imported=C2=A0from=C2=A0another=C2=A0module=C2=A0/=C2=A0bundle=C2=A0/=C2= =A0package. =0A>=C2=A0 =0A>=C2=A0The=C2=A0Entry's=C2=A0would=C2=A0be=C2=A0i= mported=C2=A0by=C2=A0the=C2=A0client=C2=A0and=C2=A0proxy=C2=A0modules=C2=A0= /=C2=A0bundles,=C2=A0avoiding=C2=A0unnecessary=C2=A0downloads=C2=A0and=C2= =A0ensuring=C2=A0shared=C2=A0visibility.=C2=A0=C2=A0The=C2=A0client=C2=A0an= d=C2=A0proxy=C2=A0will=C2=A0need=C2=A0to=C2=A0have=C2=A0an=C2=A0overlapping= =C2=A0import=C2=A0package=C2=A0version=C2=A0range=C2=A0and=C2=A0the=C2=A0cu= rrently=C2=A0utilised=C2=A0package=C2=A0at=C2=A0the=C2=A0client=C2=A0will= =C2=A0need=C2=A0to=C2=A0be=C2=A0within=C2=A0the=C2=A0proxy's=C2=A0imported= =C2=A0version=C2=A0range,=C2=A0so=C2=A0it=C2=A0will=C2=A0be=C2=A0wired=C2= =A0/=C2=A0resolved=C2=A0correctly. =0A>=C2=A0 =0A>=C2=A0We=C2=A0should=C2= =A0look=C2=A0at=C2=A0implementing=C2=A0a=C2=A0modular=C2=A0test=C2=A0case= =C2=A0of=C2=A0what=C2=A0your=C2=A0doing,=C2=A0to=C2=A0test=C2=A0our=C2=A0OS= GiClassProvider. =0A>=C2=A0 =0A>=C2=A0Supporting=C2=A0OSGi=C2=A0is=C2=A0lik= ely=C2=A0to=C2=A0require=C2=A0delayed=C2=A0unmarshalling.=C2=A0=C2=A0Logical=C2=A0comparisons=C2=A0of=C2=A0Package=C2=A0version= =C2=A0Entry's=C2=A0will=C2=A0be=C2=A0required=C2=A0before=C2=A0proxy's=C2= =A0can=C2=A0be=C2=A0downloaded/=C2=A0unmarshalled. =0A>=C2=A0 =0A>=C2=A0The= =C2=A0lookup=C2=A0service=C2=A0only=C2=A0provides=C2=A0exact=C2=A0matching.= =C2=A0=C2=A0However=C2=A0it=C2=A0would=C2=A0be=C2=A0possible=C2=A0to=C2=A0p= erform=C2=A0a=C2=A0limited=C2=A0range=C2=A0of=C2=A0version=C2=A0matching=C2= =A0with=C2=A0wild=C2=A0cards=C2=A0without=C2=A0delayed=C2=A0unmarshalling. = =0A>=C2=A0 =0A>=C2=A0Modular=C2=A0frameworks=C2=A0reduce=C2=A0downloads=C2= =A0by=C2=A0utilising=C2=A0already=C2=A0downloaded=C2=A0code=C2=A0when=C2=A0= compatible. =0A>=C2=A0 =0A>=C2=A0Regards, =0A>=C2=A0 =0A>=C2=A0Peter =0A>= =C2=A0 =0A>=C2=A0Sent=C2=A0from=C2=A0my=C2=A0Samsung=C2=A0device. =0A>=C2= =A0=C2=A0 =0A>=C2=A0=C2=A0=C2=A0Include=C2=A0original=C2=A0message =0A>=C2= =A0----=C2=A0Original=C2=A0message=C2=A0---- =0A>=C2=A0From:=C2=A0Gregg=C2= =A0Wonderly=C2=A0 =0A>=C2=A0Sent:=C2=A002/02/2017=C2=A006:56= :43=C2=A0am =0A>=C2=A0To:=C2=A0dev@river.apache.org =0A>=C2=A0Subject:=C2= =A0Re:=C2=A0OSGi =0A>=C2=A0 =0A>=C2=A0Part=C2=A0of=C2=A0the=C2=A0=E2=80=9Cp= referred=E2=80=9D=C2=A0is=C2=A0to=C2=A0keep=C2=A0downloads=C2=A0from=C2=A0h= appening.=C2=A0=C2=A0But=C2=A0the=C2=A0other=C2=A0is=C2=A0the=C2=A0fact=C2= =A0that=C2=A0the=C2=A0UI=C2=A0is=C2=A0already=C2=A0using/linked=C2=A0to=C2= =A0specific=C2=A0sources=C2=A0of=C2=A0the=C2=A0Entry=C2=A0classes=C2=A0that= =C2=A0it=C2=A0uses=C2=A0for=C2=A0finding=C2=A0the=C2=A0name=C2=A0of=C2=A0th= e=C2=A0service,=C2=A0the=C2=A0icon=C2=A0and=C2=A0other=C2=A0details.=C2=A0=C2=A0There=C2=A0are=C2=A0serviceUI=C2=A0classes=C2= =A0which=C2=A0are=C2=A0also=C2=A0already=C2=A0bound=C2=A0at=C2=A0the=C2=A0t= ime=C2=A0of=C2=A0service=C2=A0discovery=C2=A0and=C2=A0the=C2=A0serviceUI=C2= =A0for=C2=A0that=C2=A0service=C2=A0needs=C2=A0to=C2=A0resolve=C2=A0to=C2=A0= those=C2=A0classes,=C2=A0not=C2=A0any=C2=A0in=C2=A0the=C2=A0codebase=C2=A0j= ars=C2=A0for=C2=A0the=C2=A0service.=C2=A0 =0A>=C2=A0 =0A>=C2=A0Gregg=C2=A0 = =0A>=C2=A0 =0A>>=C2=A0=C2=A0On=C2=A0Feb=C2=A01,=C2=A02017,=C2=A0at=C2=A05:5= 2=C2=A0AM,=C2=A0Peter=C2=A0=C2=A0wrote:=C2=A0 =0A>>=C2=A0= =C2=A0=C2=A0 =0A>>=C2=A0=C2=A0Gregg,=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 =0A>>=C2= =A0=C2=A0Have=C2=A0you=C2=A0got=C2=A0some=C2=A0more=C2=A0detail=C2=A0on=C2= =A0your=C2=A0Entry=C2=A0classes=C2=A0that=C2=A0need=C2=A0to=C2=A0be=C2=A0pr= eferred?=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0Thanks,=C2=A0 =0A>>= =C2=A0=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0Peter.=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 = =0A>>=C2=A0=C2=A0Sent=C2=A0from=C2=A0my=C2=A0Samsung=C2=A0device.=C2=A0 =0A= >>=C2=A0=C2=A0=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0=C2=A0Include=C2=A0origin= al=C2=A0message=C2=A0 =0A>>=C2=A0=C2=A0----=C2=A0Original=C2=A0message=C2= =A0----=C2=A0 =0A>>=C2=A0=C2=A0From:=C2=A0Gregg=C2=A0Wonderly=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0Sent:=C2=A031/01/2017=C2=A012:56:56=C2=A0am= =C2=A0 =0A>>=C2=A0=C2=A0To:=C2=A0dev@river.apache.org=C2=A0 =0A>>=C2=A0=C2= =A0Subject:=C2=A0Re:=C2=A0OSGi=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 =0A>>=C2=A0=C2= =A0Maybe=C2=A0you=C2=A0can=C2=A0help=C2=A0me=C2=A0out=C2=A0here=C2=A0by=C2= =A0explaining=C2=A0how=C2=A0it=C2=A0is=C2=A0that=C2=A0execution=C2=A0contex= t=C2=A0and=C2=A0class=C2=A0visibility=C2=A0are=C2=A0both=C2=A0handled=C2=A0= by=C2=A0OSGi=C2=A0bundles.=C2=A0=C2=A0For=C2=A0example,=C2=A0one=C2=A0of=C2=A0my=C2=A0client=C2=A0applic= ations=C2=A0is=C2=A0a=C2=A0desktop=C2=A0environment.=C2=A0=C2=A0It=C2=A0doe= s=C2=A0service=C2=A0look=C2=A0up=C2=A0for=C2=A0all=C2=A0services=C2=A0regis= trations=C2=A0providing=C2=A0a=C2=A0=E2=80=9CserviceUI=E2=80=9D.=C2=A0=C2= =A0It=C2=A0then=C2=A0integrates=C2=A0all=C2=A0of=C2=A0those=C2=A0services= =C2=A0into=C2=A0a=C2=A0desktop=C2=A0view=C2=A0where=C2=A0the=C2=A0UIs=C2=A0= are=C2=A0running=C2=A0at=C2=A0the=C2=A0same=C2=A0time=C2=A0with=C2=A0each= =C2=A0one=C2=A0imbedded=C2=A0in=C2=A0a=C2=A0JDesktopPane=C2=A0or=C2=A0a=C2= =A0JTabbedPane=C2=A0or=C2=A0a=C2=A0JFrame=C2=A0or=C2=A0JDialog.=C2=A0=C2=A0= There=C2=A0are=C2=A0callbacks=C2=A0from=C2=A0parts=C2=A0of=C2=A0that=C2=A0e= nvironment=C2=A0into=C2=A0my=C2=A0application=C2=A0which=C2=A0in=C2=A0turn= =C2=A0is=C2=A0interacting=C2=A0with=C2=A0the=C2=A0ServiceUI=C2=A0component.= =C2=A0=C2=A0You=C2=A0have=C2=A0AWT=C2=A0event=C2=A0threads=C2=A0which=C2=A0= are=C2=A0calling=C2=A0out,=C2=A0into=C2=A0the=C2=A0ServiceUIs=C2=A0and=C2= =A0lots=C2=A0of=C2=A0other=C2=A0threads=C2=A0of=C2=A0execution=C2=A0which= =C2=A0all,=C2=A0ultimately,=C2=A0must=C2=A0have=C2=A0different=C2=A0class= =C2=A0loading=C2=A0environments=C2=A0so=C2=A0that=C2=A0the=C2=A0ServiceUI= =C2=A0components=C2=A0can=C2=A0know=C2=A0where=C2=A0to=C2=A0load=C2=A0code= =C2=A0from.=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0It=E2=80= =99s=C2=A0exactly=C2=A0TCCL=C2=A0that=C2=A0allows=C2=A0them=C2=A0to=C2=A0kn= ow=C2=A0that=C2=A0based=C2=A0on=C2=A0all=C2=A0the=C2=A0other=C2=A0class=C2= =A0loading=C2=A0standards.=C2=A0=C2=A0The=C2=A0ClassLoader=C2=A0is=C2=A0exa= ctly=C2=A0the=C2=A0thing=C2=A0that=C2=A0all=C2=A0of=C2=A0them=C2=A0have=C2=A0in=C2=A0common=C2=A0if= =C2=A0you=C2=A0include=C2=A0OSGi=C2=A0bundles=C2=A0as=C2=A0well.=C2=A0=C2= =A0The=C2=A0important=C2=A0detail,=C2=A0is=C2=A0that=C2=A0if=C2=A0the=C2=A0= TCCL=C2=A0is=C2=A0not=C2=A0used=C2=A0as=C2=A0new=C2=A0ClassLoaders=C2=A0are= =C2=A0created,=C2=A0then=C2=A0there=C2=A0is=C2=A0no=C2=A0context=C2=A0for= =C2=A0those=C2=A0new=C2=A0ClassLoaders=C2=A0to=C2=A0reference,=C2=A0univers= ally.=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0The=C2=A0importa= nt=C2=A0details=C2=A0are:=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 =0A>>=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A01)=C2=A0The=C2=A0desktop=C2=A0application=C2= =A0has=C2=A0to=C2=A0be=C2=A0able=C2=A0to=C2=A0prefer=C2=A0certain=C2=A0Entr= y=C2=A0classes=C2=A0which=C2=A0define=C2=A0details=C2=A0that=C2=A0are=C2=A0= presented=C2=A0to=C2=A0the=C2=A0user.=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A02)=C2=A0When=C2=A0the=C2=A0user=C2=A0double=C2=A0clicks= =C2=A0on=C2=A0a=C2=A0services=C2=A0icon,=C2=A0or=C2=A0right=C2=A0clicks=C2= =A0and=C2=A0selects=C2=A0=E2=80=9COpen=C2=A0in=C2=A0new=C2=A0Frame=E2=80=9D= ,=C2=A0an=C2=A0async=C2=A0worker=C2=A0thread=C2=A0needs=C2=A0a=C2=A0TCCL=C2= =A0pointing=C2=A0at=C2=A0the=C2=A0correct=C2=A0parent=C2=A0class=C2=A0loade= r=C2=A0for=C2=A0the=C2=A0service=E2=80=99s=C2=A0URLClassLoader=C2=A0to=C2= =A0reference=C2=A0so=C2=A0that=C2=A0the=C2=A0preferred=C2=A0classes=C2=A0wo= rk.=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A03)=C2=A0Anytime=C2= =A0that=C2=A0the=C2=A0AWT=C2=A0Event=C2=A0thread=C2=A0might=C2=A0be=C2=A0ac= tive=C2=A0inside=C2=A0of=C2=A0the=C2=A0services=C2=A0UI=C2=A0implementation= ,=C2=A0it=C2=A0also=C2=A0needs=C2=A0to=C2=A0indicate=C2=A0the=C2=A0correct= =C2=A0parent=C2=A0class=C2=A0loader=C2=A0if=C2=A0that=C2=A0UI=C2=A0component=C2=A0causes=C2= =A0other=C2=A0class=C2=A0loading=C2=A0to=C2=A0occur.=C2=A0=C2=A0 =0A>>=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A04)=C2=A0I=C2=A0am=C2=A0speaking=C2=A0speci= fically=C2=A0in=C2=A0the=C2=A0context=C2=A0of=C2=A0deferred=C2=A0class=C2= =A0loading=C2=A0which=C2=A0is=C2=A0controlled=C2=A0outside=C2=A0of=C2=A0the= =C2=A0service=C2=A0discovery=C2=A0moment.=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0=C2= =A0 =0A>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =0A>>>=C2=A0=C2=A0=C2=A0On=C2=A0Jan= =C2=A030,=C2=A02017,=C2=A0at=C2=A04:04=C2=A0AM,=C2=A0Micha=C5=82=C2=A0K=C5= =82eczek=C2=A0(XPro=C2=A0Sp.=C2=A0z=C2=A0o.=C2=A0o.)=C2=A0=C2=A0wrote:=C2=A0=C2=A0 =0A>>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =0A>>= >=C2=A0=C2=A0=C2=A0What=C2=A0I=C2=A0think=C2=A0Jini=C2=A0designers=C2=A0did= =C2=A0not=C2=A0realize=C2=A0is=C2=A0that=C2=A0class=C2=A0loading=C2=A0can= =C2=A0be=C2=A0treated=C2=A0exactly=C2=A0as=C2=A0any=C2=A0other=C2=A0capabil= ity=C2=A0provided=C2=A0by=C2=A0a=C2=A0(possibly=C2=A0remote)=C2=A0service.= =C2=A0=C2=A0 =0A>>>=C2=A0=C2=A0=C2=A0Once=C2=A0you=C2=A0realize=C2=A0that= =C2=A0-=C2=A0it=C2=A0is=C2=A0possible=C2=A0to=C2=A0provide=C2=A0a=C2=A0kind= =C2=A0of=C2=A0a=C2=A0"universal=C2=A0container=C2=A0infrastructure"=C2=A0wh= ere=C2=A0different=C2=A0class=C2=A0loading=C2=A0implementations=C2=A0may=C2= =A0co-exist=C2=A0in=C2=A0a=C2=A0single=C2=A0JVM.=C2=A0=C2=A0 =0A>>=C2=A0=C2= =A0=C2=A0 =0A>>=C2=A0=C2=A0That=E2=80=99s=C2=A0precisely=C2=A0what=C2=A0Cla= ssLoader=C2=A0is=C2=A0for.=C2=A0=C2=A0TCCL=C2=A0is=C2=A0precisely=C2=A0to= =C2=A0allow=C2=A0=E2=80=9Csome=C2=A0class=E2=80=9D=C2=A0to=C2=A0know=C2=A0w= hat=C2=A0context=C2=A0to=C2=A0associate=C2=A0newly=C2=A0loaded=C2=A0classes= =C2=A0with,=C2=A0so=C2=A0that=C2=A0in=C2=A0such=C2=A0an=C2=A0environment,=C2=A0any=C2=A0c= ode=C2=A0can=C2=A0load=C2=A0classes=C2=A0on=C2=A0behalf=C2=A0of=C2=A0some= =C2=A0other=C2=A0code/context.=C2=A0=C2=A0It=C2=A0doesn=E2=80=99t=C2=A0matt= er=C2=A0if=C2=A0it=C2=A0is=C2=A0TCCL=C2=A0or=C2=A0some=C2=A0other=C2=A0clas= s=C2=A0management=C2=A0scheme=C2=A0such=C2=A0as=C2=A0OSGi=C2=A0bundles.=C2= =A0=C2=A0We=C2=A0are=C2=A0talking=C2=A0about=C2=A0the=C2=A0same=C2=A0detail= ,=C2=A0just=C2=A0implemented=C2=A0in=C2=A0a=C2=A0different=C2=A0way.=C2=A0= =C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 =0A>>>=C2=A0=C2=A0=C2=A0What's=C2=A0more=C2= =A0-=C2=A0these=C2=A0class=C2=A0loading=C2=A0implementations=C2=A0may=C2=A0= be=C2=A0dynamic=C2=A0themselves=C2=A0-=C2=A0ie.=C2=A0it=C2=A0is=C2=A0a=C2= =A0service=C2=A0that=C2=A0provides=C2=A0the=C2=A0client=C2=A0with=C2=A0a=C2= =A0way=C2=A0to=C2=A0load=C2=A0its=C2=A0own=C2=A0(proxy)=C2=A0classes.=C2=A0= =C2=A0 =0A>>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =0A>>>=C2=A0=C2=A0=C2=A0In=C2= =A0other=C2=A0words:=C2=A0"there=C2=A0not=C2=A0enough=C2=A0Jini=C2=A0in=C2= =A0Jini=C2=A0itself=E2=80=9D.=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 =0A>>=C2= =A0=C2=A0I=C2=A0am=C2=A0not=C2=A0sure=C2=A0I=C2=A0understand=C2=A0where=C2= =A0the=C2=A0short=C2=A0coming=C2=A0is=C2=A0at=C2=A0then.=C2=A0=C2=A0Maybe= =C2=A0you=C2=A0can=C2=A0illustrate=C2=A0with=C2=A0an=C2=A0example=C2=A0wher= e=C2=A0TCCL=C2=A0fails=C2=A0to=C2=A0allow=C2=A0some=C2=A0piece=C2=A0of=C2= =A0code=C2=A0to=C2=A0load=C2=A0classes=C2=A0on=C2=A0behalf=C2=A0of=C2=A0ano= ther=C2=A0piece=C2=A0of=C2=A0code?=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 =0A>= >=C2=A0=C2=A0In=C2=A0my=C2=A0desktop=C2=A0application=C2=A0environment,=C2= =A0there=C2=A0is=C2=A0a=C2=A0abstract=C2=A0class=C2=A0which=C2=A0is=C2=A0us= ed=C2=A0by=C2=A0each=C2=A0serviceUI=C2=A0to=C2=A0allow=C2=A0the=C2=A0desktop=C2=A0to=C2=A0know=C2=A0if=C2= =A0it=C2=A0provides=C2=A0the=C2=A0ability=C2=A0to=C2=A0open=C2=A0into=C2=A0= one=C2=A0of=C2=A0the=C2=A0above=C2=A0mentioned=C2=A0JComponent=C2=A0subclas= ses..=C2=A0=C2=A0That=C2=A0class=C2=A0is=C2=A0preferred=C2=A0and=C2=A0provi= ded=C2=A0and=C2=A0resolved=C2=A0using=C2=A0the=C2=A0codebase=C2=A0of=C2=A0t= he=C2=A0desktop=C2=A0client.=C2=A0=C2=A0That=C2=A0class=C2=A0loading=C2=A0e= nvironment=C2=A0is=C2=A0then=C2=A0the=C2=A0place=C2=A0where=C2=A0the=C2=A0s= ervice=C2=A0is=C2=A0finally=C2=A0resolved=C2=A0and=C2=A0classes=C2=A0create= d=C2=A0so=C2=A0that=C2=A0the=C2=A0proxy=C2=A0can=C2=A0be=C2=A0handed=C2=A0t= o=C2=A0the=C2=A0serviceUI=C2=A0component=C2=A0which=C2=A0ultimately=C2=A0on= ly=C2=A0partially=C2=A0resolves=C2=A0from=C2=A0the=C2=A0services=C2=A0codeb= ase.=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0It=E2=80=99s=C2= =A0this=C2=A0class=C2=A0compatibility=C2=A0which=C2=A0needs=C2=A0to=C2=A0be= =C2=A0lightweight.=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 =0A>>>=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 =0A>>>=C2=A0=C2=A0=C2=A0We=C2=A0have=C2=A0_all_=C2=A0the= =C2=A0required=C2=A0pieces=C2=A0in=C2=A0place:=C2=A0=C2=A0 =0A>>>=C2=A0=C2= =A0=C2=A0-=C2=A0dynamic=C2=A0code=C2=A0loading=C2=A0and=C2=A0execution=C2= =A0(ClassLoaders),=C2=A0=C2=A0 =0A>>>=C2=A0=C2=A0=C2=A0-=C2=A0security=C2= =A0model=C2=A0and=C2=A0implementation=C2=A0that=C2=A0allows=C2=A0restrictin= g=C2=A0rights=C2=A0of=C2=A0the=C2=A0downloaded=C2=A0code,=C2=A0=C2=A0 =0A>>= >=C2=A0=C2=A0=C2=A0-=C2=A0and=C2=A0a=C2=A0serialization/deserialization=C2= =A0which=C2=A0allows=C2=A0sending=C2=A0arbitrary=C2=A0data=C2=A0(and=C2=A0y= es=C2=A0-=C2=A0code=C2=A0too)=C2=A0over=C2=A0the=C2=A0wire.=C2=A0=C2=A0 =0A>>>=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 =0A>>>=C2=A0=C2=A0=C2=A0It=C2=A0is=C2=A0just=C2=A0the=C2=A0matter=C2=A0= of=C2=A0glueing=C2=A0the=C2=A0pieces=C2=A0together.=C2=A0=C2=A0 =0A>>=C2=A0= =C2=A0=C2=A0 =0A>>=C2=A0=C2=A0Correct,=C2=A0but=C2=A0it=E2=80=99s=C2=A0a=C2= =A0matter=C2=A0of=C2=A0class=C2=A0compatibility=C2=A0where=C2=A0a=C2=A0clie= nt=C2=A0environment=C2=A0has=C2=A0to=C2=A0interact=C2=A0with=C2=A0a=C2=A0se= rvice=C2=A0and=C2=A0the=C2=A0serviceUI=C2=A0components=C2=A0where=C2=A0TCCL= =C2=A0excels=C2=A0and=C2=A0providing=C2=A0the=C2=A0ability=C2=A0to=C2=A0cre= ate=C2=A0class=C2=A0loaders=C2=A0with=C2=A0the=C2=A0correct=C2=A0parent=C2= =A0context,=C2=A0for=C2=A0Java=C2=A0based=C2=A0code.=C2=A0=C2=A0OSGi=C2=A0i= ntroduces=C2=A0the=C2=A0opportunity=C2=A0for=C2=A0some=C2=A0extra=C2=A0bell= s=C2=A0and=C2=A0whistles.=C2=A0=C2=A0But=C2=A0I=C2=A0don=E2=80=99t=C2=A0see= =C2=A0that=C2=A0it=C2=A0can=C2=A0completely=C2=A0eliminate=C2=A0the=C2=A0na= ture=C2=A0of=C2=A0TCCL=C2=A0and=C2=A0how=C2=A0it=C2=A0was=C2=A0intended=C2= =A0to=C2=A0be=C2=A0used.=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 =0A>>>=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 =0A>>>=C2=A0=C2=A0=C2=A0Thanks,=C2=A0=C2=A0 =0A>>>= =C2=A0=C2=A0=C2=A0Michal=C2=A0=C2=A0 =0A>>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = =0A>>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =0A>>>=C2=A0=C2=A0=C2=A0Gregg=C2=A0Won= derly=C2=A0wrote:=C2=A0=C2=A0 =0A>>>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = =0A>>>>=C2=A0=C2=A0=C2=A0I=C2=A0am=C2=A0not=C2=A0an=C2=A0OSGi=C2=A0user.=C2= =A0=C2=A0I=C2=A0am=C2=A0not=C2=A0trying=C2=A0to=C2=A0be=C2=A0an=C2=A0OSGi= =C2=A0opponent.=C2=A0=C2=A0What=C2=A0I=C2=A0am=C2=A0trying=C2=A0to=C2=A0say= =C2=A0is=C2=A0that=C2=A0I=C2=A0consider=C2=A0all=C2=A0the=C2=A0commentary= =C2=A0in=C2=A0those=C2=A0articles=C2=A0about=C2=A0TCCL=C2=A0not=C2=A0workin= g=C2=A0to=C2=A0be=C2=A0just=C2=A0inexperience=C2=A0and=C2=A0argument=C2=A0to=C2=A0try= =C2=A0and=C2=A0justify=C2=A0a=C2=A0different=C2=A0position=C2=A0or=C2=A0int= erpretation=C2=A0of=C2=A0what=C2=A0the=C2=A0real=C2=A0problem=C2=A0is.=C2= =A0=C2=A0 =0A>>>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =0A>>>>=C2=A0=C2=A0=C2=A0Th= e=C2=A0real=C2=A0problem=C2=A0is=C2=A0that=C2=A0there=C2=A0is=C2=A0not=C2= =A0one=C2=A0=E2=80=9Cmodule=E2=80=9D=C2=A0concept=C2=A0in=C2=A0Java=C2=A0(a= nother=C2=A0one=C2=A0is=C2=A0almost=C2=A0here=C2=A0in=C2=A0JDK=C2=A09/Jigsa= w).=C2=A0=C2=A0No=C2=A0one=C2=A0is=C2=A0working=C2=A0together=C2=A0on=C2=A0= this,=C2=A0and=C2=A0OSGi=C2=A0is=C2=A0solving=C2=A0problems=C2=A0in=C2=A0a= =C2=A0small=C2=A0part=C2=A0of=C2=A0the=C2=A0world=C2=A0of=C2=A0software.=C2= =A0=C2=A0=C2=A0It=C2=A0works=C2=A0well=C2=A0for=C2=A0embedded,=C2=A0static= =C2=A0systems.=C2=A0=C2=A0I=C2=A0think=C2=A0OSGi=C2=A0misses=C2=A0the=C2=A0= mark=C2=A0on=C2=A0dynamic=C2=A0systems=C2=A0because=C2=A0of=C2=A0the=C2=A0p= iecemeal=C2=A0loading=C2=A0and=C2=A0resolving=C2=A0of=C2=A0classes.=C2=A0= =C2=A0I=C2=A0am=C2=A0not=C2=A0sure=C2=A0that=C2=A0OSGi=C2=A0developers=C2= =A0really=C2=A0understand=C2=A0everything=C2=A0that=C2=A0Jini=C2=A0can=C2= =A0do=C2=A0because=C2=A0of=C2=A0the=C2=A0choices=C2=A0made=C2=A0(and=C2=A0n= ot=C2=A0made)=C2=A0in=C2=A0the=C2=A0design.=C2=A0=C2=A0The=C2=A0people=C2= =A0who=C2=A0put=C2=A0Jini=C2=A0together=C2=A0had=C2=A0a=C2=A0great=C2=A0dea= l=C2=A0of=C2=A0years=C2=A0of=C2=A0experience=C2=A0piecing=C2=A0together=C2= =A0systems=C2=A0which=C2=A0needed=C2=A0to=C2=A0work=C2=A0well=C2=A0with=C2= =A0a=C2=A0faster=C2=A0degree=C2=A0of=C2=A0variability=C2=A0and=C2=A0adaptat= ion=C2=A0to=C2=A0the=C2=A0environment=C2=A0then=C2=A0what=C2=A0most=C2=A0people=C2=A0seem=C2=A0to=C2=A0experience=C2=A0in=C2= =A0their=C2=A0classes=C2=A0and=C2=A0work=C2=A0environments=C2=A0which=C2=A0= are=C2=A0locked=C2=A0down=C2=A0by=C2=A0extremely=C2=A0controlled=C2=A0distr= ibution=C2=A0strategies=C2=A0which=C2=A0end=C2=A0up=C2=A0slowing=C2=A0devel= opment=C2=A0in=C2=A0an=C2=A0attempt=C2=A0to=C2=A0control=C2=A0everything=C2= =A0that=C2=A0doesn=E2=80=99t=C2=A0actually=C2=A0cause=C2=A0quality=C2=A0to= =C2=A0suffer.=C2=A0=C2=A0 =0A>>>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =0A>>>>=C2= =A0=C2=A0=C2=A0Gregg=C2=A0=C2=A0 =0A>>>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =0A>= >>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =0A>>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =0A>= >=C2=A0=C2=A0=C2=A0 =0A>>=C2=A0=C2=A0=C2=A0 =0A>=C2=A0 =0A>=C2=A0 =0A=0A=0A= =0A --8323328-923541131-1486095805=:1297--