package Ġio . feature hub . lifecycle Ċ Ċ import Ġcd . connect . app . config . Config Key Ċ import Ġcd . connect . app . config . Declared Config Resolver Ċ import Ġcd . connect . j ersey . common . Logging Configuration Ċ import Ġio . feature hub . j ersey . config . Common Configuration Ċ import Ġio . op entelemetry . api . Open Telemetry Ċ import Ġio . op entelemetry . api . bag gage . Bag gage Ċ import Ġio . op entelemetry . api . bag gage . propagation . W 3 CB agg age Propag ator Ċ import Ġio . op entelemetry . api . trace . Span Ċ import Ġio . op entelemetry . api . trace . Span Kind Ċ import Ġio . op entelemetry . api . trace . StatusCode Ċ import Ġio . op entelemetry . api . trace . Tracer Ċ import Ġio . op entelemetry . api . trace . propagation . W 3 C Trace Context Propag ator Ċ import Ġio . op entelemetry . context . Context Ċ import Ġio . op entelemetry . context . Scope Ċ import Ġio . op entelemetry . context . propagation . Context Propag ators Ċ import Ġio . op entelemetry . context . propagation . Text Map Getter Ċ import Ġio . op entelemetry . context . propagation . Text Map Propag ator Ċ import Ġio . op entelemetry . context . propagation . Text Map Setter Ċ import Ġio . op entelemetry . export ers . logging . Logging Span Exporter Ċ import Ġio . op entelemetry . sdk . Open Telemetry Sdk Ċ import Ġio . op entelemetry . sdk . trace . Sdk Tracer Provider Ċ import Ġio . op entelemetry . sdk . trace . export . Simple Span Processor Ċ import Ġjak arta . inject . Inject Ċ import Ġjak arta . inject . Singleton Ċ import Ġjak arta . ws . rs . client . Client Ċ import Ġjak arta . ws . rs . client . Client Builder Ċ import Ġjak arta . ws . rs . client . Client RequestContext Ċ import Ġjak arta . ws . rs . client . ClientResponse Context Ċ import Ġjak arta . ws . rs . container . Container RequestContext Ċ import Ġjak arta . ws . rs . core . Feature Ċ import Ġjak arta . ws . rs . core . Feature Context Ċ import Ġorg . glass fish . hk 2 . api . Service Locator Ċ import Ġorg . glass fish . j ersey . client . spi . Post Invocation Interceptor Ċ import Ġorg . glass fish . j ersey . client . spi . Pre Invocation Interceptor Ċ import Ġorg . glass fish . j ersey . internal . inject . Abstract Binder Ċ import Ġorg . glass fish . j ersey . server . Container Request Ċ import Ġorg . glass fish . j ersey . server . Extended Uri Info Ċ import Ġorg . glass fish . j ersey . server . monitoring . Application Event Ċ import Ġorg . glass fish . j ersey . server . monitoring . Application EventListener Ċ import Ġorg . glass fish . j ersey . server . monitoring . Request Event Ċ import Ġorg . glass fish . j ersey . server . monitoring . Request EventListener Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util .* Ċ Ċ class ĠJ ax Rs Container Request Map Ġ: ĠText Map Getter < Container RequestContext > Ġ{ ĊĠ Ġoverride Ġfun Ġkeys ( carrier : ĠContainer RequestContext ): ĠMutable Iterable < String > Ġ{ ĊĠĠĠ Ġreturn Ġcarrier . headers . keys ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget ( carrier : ĠContainer RequestContext ?, Ġkey : ĠString ): ĠString ? Ġ{ ĊĠĠĠ Ġreturn Ġcarrier ?. getHeader String ( key ) ĊĠ Ġ} Ċ } Ċ Ċ class ĠJ ax Rs Client Request Map Ġ: ĠText Map Setter < Client RequestContext > Ġ{ ĊĠ Ġoverride Ġfun Ġset ( carrier : ĠClient RequestContext ?, Ġkey : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠ Ġcarrier ?. headers ?. put Single ( key , Ġvalue ) ĊĠ Ġ} Ċ } Ċ Ċ @ Singleton Ċ class ĠTe lemetry Invocation Interceptor Ġ@ Inject Ġconstructor ( ĊĠ Ġprivate Ġval Ġopen Telemetry : ĠOpen Telemetry , ĊĠ Ġprivate Ġval Ġtracer : ĠTr acer Ċ ) Ġ: ĠPre Invocation Interceptor , ĠPost Invocation Interceptor Ġ{ ĊĠ Ġprivate Ġval Ġinjector Ġ= ĠJ ax Rs Client Request Map () ĊĊĠ Ġoverride Ġfun Ġbefore Request ( request : ĠClient RequestContext ) Ġ{ ĊĠĠĠ Ġval Ġpath Ġ= ĠTe lemetry Application EventListener . normalize Path ( request . uri . path ) ĊĠĠĠ Ġval Ġspan Ġ= Ġtracer . span Builder ("${ request . method } Ġ${ request . uri } "). set Span Kind ( Span Kind . CLIENT ). start Span () ĊĠĠĠ Ġval Ġscope Ġ= Ġspan . make Current () ĊĊĠĠĠ Ġopen Telemetry . propag ators . text Map Propag ator . inject ( Context . current (), Ġrequest , Ġinjector ) ĊĊĠĠĠ Ġspan . setAttribute (" HTTP _ METHOD ", Ġrequest . method ) ĊĠĠĠ Ġspan . setAttribute (" HTTP _ SCHEME ", Ġrequest . uri . scheme ) ĊĠĠĠ Ġspan . setAttribute (" HTTP _ HOST ", Ġrequest . uri . host ) ĊĠĠĠ Ġspan . setAttribute (" HTTP _ RESOURCE ", Ġpath ) ĊĊĠĠĠ Ġrequest . setProperty (" span ", Ġspan ) ĊĠĠĠ Ġrequest . setProperty (" scope ", Ġscope ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġafter Request ( request : ĠClient RequestContext , Ġresponse : ĠClient Response Context ) Ġ{ ĊĠĠĠ Ġclose ( request ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġclose ( request : ĠClient RequestContext ) Ġ{ ĊĠĠĠ Ġ( request . getProperty (" span ") Ġas ĠSpan ). end () ĊĠĠĠ Ġ( request . getProperty (" scope ") Ġas ĠScope ). close () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Exception ( ĊĠĠĠ Ġrequest : ĠClient RequestContext , ĊĠĠĠ Ġexception Context : ĠPost Invocation Interceptor . Exception Context ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġ( request . getProperty (" span ") Ġas ĠSpan ). setStatus ( StatusCode . ERROR ) ĊĠĠĠ Ġclose ( request ) ĊĠ Ġ} Ċ Ċ } Ċ Ċ @ Singleton Ċ class ĠTe lemetry Application EventListener Ġ@ Inject Ġconstructor ( ĊĠ Ġprivate Ġval Ġopen Telemetry : ĠOpen Telemetry , ĊĠ Ġprivate Ġval Ġtracer : ĠTr acer Ċ ) Ġ: ĠApplication EventListener Ġ{ ĊĠ Ġprivate Ġval Ġextractor Ġ= ĠJ ax Rs Container Request Map () ĊĊĠ Ġoverride Ġfun Ġon Event ( event : ĠApplication Event ?) Ġ{ ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Request ( request Event : ĠRequest Event ): ĠRequest EventListener ? Ġ{ ĊĠĠĠ Ġreturn ĠTe lemetry Request EventListener ( open Telemetry , Ġtracer , Ġextractor ) ĊĠ Ġ} ĊĊĠ Ġinternal Ġclass ĠTe lemetry Request EventListener Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġopen Telemetry : ĠOpen Telemetry , ĊĠĠĠ Ġprivate Ġval Ġtracer : ĠTr acer , ĊĠĠĠ Ġprivate Ġval Ġextractor : ĠJ ax Rs Container Request Map ĊĠ Ġ) Ġ: ĠRequest EventListener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlog : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Telemetry Request EventListener :: class . java ) ĊĊĠĠĠ Ġvar Ġspan : ĠSpan ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġscope : ĠScope ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Event ( event : ĠRequest Event ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( event . type Ġ== ĠRequest Event . Type . REQUEST _ MATCH ED ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess Request ( event . container Request ) ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event . type Ġ== ĠRequest Event . Type . ON _ EXCEPTION ) Ġ{ ĊĠĠĠĠĠĠĠ Ġspan ?. setStatus ( StatusCode . ERROR ) ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event . type Ġ== ĠRequest Event . Type . FINISHED ) Ġ{ ĊĠĠĠĠĠĠĠ Ġspan ?. end () ĊĠĠĠĠĠĠĠ Ġscope ?. close () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Request ( request : ĠContainer Request ) Ġ{ ĊĠĠĠĠĠ Ġval Ġextracted Context Ġ= Ġopen Telemetry . propag ators . text Map Propag ator . extract ( ĊĠĠĠĠĠĠĠ ĠContext . current (), ĊĠĠĠĠĠĠĠ Ġrequest , Ġextractor ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġscope Ġ= Ġextracted Context . make Current () ĊĠĠĠĠĠ Ġval Ġextended Uri Info Ġ= Ġrequest . uri Info ĊĠĠĠĠĠ Ġval Ġname : ĠOptional < String > Ġ= Ġextended Uri Info . matched Templates . stream () ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġuri Template Ġ-> Ġnormalize Path ( uri Template . template ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. reduce Ġ{ Ġa , Ġb Ġ-> Ġb Ġ+ Ġa Ġ} ĊĠĠĠĠĠ Ġval Ġpath Ġ= Ġif Ġ( name . isPresent ) Ġname . get () Ġelse Ġ"/" ĊĠĠĠĠĠ Ġspan Ġ= Ġtracer . span Builder ("${ request . method } Ġ${ path }") ĊĠĠĠĠĠĠĠ Ġ. set Span Kind ( Span Kind . SERVER ) ĊĠĠĠĠĠĠĠ Ġ. start Span () Ċ Ċ // ĠĠĠĠĠ Ġval Ġb agg age Ġ= ĠB agg age . from Context ( Context . current ()) Ċ Ċ // ĠĠĠĠĠ Ġif Ġ( bag gage . size () Ġ> Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġb agg age . forEach ({ Ġk , Ġv Ġ-> Ġlog . info (" bag gage Ġ` {} ` :` {}", Ġk , Ġv . value ) Ġ} Ġ) Ċ // ĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġlog . info (" bag gage Ġis Ġempty ") Ċ // ĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġspan !!. setAttribute (" HTTP _ METHOD ", Ġrequest . method ) ĊĠĠĠĠĠ Ġspan !!. setAttribute (" HTTP _ SCHEME ", Ġrequest . request Uri . scheme ) ĊĠĠĠĠĠ Ġspan !!. setAttribute (" HTTP _ HOST ", Ġrequest . request Uri . host ) ĊĠĠĠĠĠ Ġspan !!. setAttribute (" HTTP _ RESOURCE ", Ġpath ) ĊĠĠĠĠĠ Ġspan !!. setStatus ( StatusCode . OK ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġfun Ġnormalize Path ( norm Path : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠ Ġvar Ġpath Ġ= Ġnorm Path ĊĠĠĠĠĠ Ġ// Ġensure Ġthat Ġnon - empty Ġpath Ġstarts Ġwith Ġ/ ĊĠĠĠĠĠ Ġif Ġ( path Ġ== Ġnull Ġ|| Ġ"/" Ġ== Ġpath ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"" ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! path . startsWith ("/ ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"/ $ path " ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ// Ġremove Ġtrailing Ġ/ ĊĠĠĠĠĠ Ġif Ġ( path . endsWith ("/ ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġpath Ġ= Ġpath . substring ( 0 , Ġpath . length Ġ- Ġ 1 ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġpath ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* ĠBecause Ġthe ĠOpen Telemetry Ġb agg age Ġis Ġonly Ġavailable Ġin Ġa Ġstatic Ġcontext , Ġthere Ġis Ġno Ġway Ġwe Ġcan Ġmock Ċ Ġ* Ġthis Ġout , Ġwe Ġwould Ġhave Ġto Ġcreate Ġan Ġentire Ġin Ġmemory Ġinstance Ġof Ġthe ĠOpen Telemetry Ġstack Ġand Ġthen Ċ Ġ* Ġinject Ġa Ġfake Ġheader Ġinto Ġit . ĠSo Ġwe Ġcreate Ġan Ġinterface Ġwrapper Ġaround Ġit Ġand Ġthis Ġshould Ġbe Ġused Ġin Ċ Ġ* Ġall Ġcases Ġof Ġchecking Ġfor Ġb agg age . Ċ Ġ*/ Ċ interface ĠB agg age Checker Ġ{ ĊĠ Ġfun Ġb agg age ( key : ĠString ): ĠString ? ĊĠ Ġfun Ġhas Bag gage ( key : ĠString ): ĠBoolean Ċ } Ċ Ċ class ĠOpen Telemetry Bag gage Checker Ġ: ĠB agg age Checker Ġ{ ĊĠ Ġoverride Ġfun Ġb agg age ( key : ĠString ): ĠString ? Ġ{ ĊĠĠĠ Ġreturn ĠB agg age . current (). getEntry Value ( key ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġhas Bag gage ( key : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġb agg age ( key ) Ġ!= Ġnull ĊĠ Ġ} Ċ } Ċ Ċ class ĠB agg age Feature : ĠFeature Ġ{ ĊĠ Ġoverride Ġfun Ġconfigure ( context : ĠFeature Context ): ĠBoolean Ġ{ ĊĠĠĠ Ġcontext . register ( object : ĠAbstract Binder () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġconfigure () Ġ{ ĊĠĠĠĠĠĠĠ Ġbind ( Open Telemetry Bag gage Checker :: class . java ). to ( Bag gage Checker :: class . java ). ` in `( Singleton :: class . java ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} Ċ } Ċ Ċ class ĠClient Telemetry Feature Ġ: ĠFeature Ġ{ ĊĠ Ġoverride Ġfun Ġconfigure ( context : ĠFeature Context ): ĠBoolean Ġ{ ĊĠĠĠ Ġcontext . register ( Telemetry Invocation Interceptor :: class . java ) ĊĠĠĠ Ġcontext . register ( Bag gage Feature :: class . java ) ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠWhen Ġwe Ġneed Ġto Ġuse Ġthe ĠOpen Telemetry Ġfrom Ġanother ĠDI Ġcontext . ĠHow Ġthe Ġclient Ġis Ġbound Ġin Ġis Ġquite Ġcomplicated Ċ Ġ* Ġas Ġwhen Ġwe Ġcan Ġonly Ġhave Ġone ĠOpen Telemetry Ġinstance Ġand Ġit Ġorig inates Ġin Ġa Ġdifferent Ġcontext . ĠThe ĠClient Ġis Ġalso Ċ Ġ* Ġits Ġown Ġcontext , Ġso Ġwe Ġhave Ġto Ġpull Ġthe Ġop entelemetry Ġ+ Ġtracer Ġfrom Ġits Ġoriginal Ġcontext Ġand Ġbind Ġit Ġto Ġthis Ġserver Ċ Ġ* Ġbased Ġone , Ġand Ġthe Ġnew Ġclient Ġone Ġ( which Ġis Ġin Ġturn Ġbound Ġto Ġthis Ġserver Ġbased Ġone ). Ċ Ġ* Ċ Ġ* ĠThis Ġfeature Ġonly Ġworks Ġwith Ġan Ġinjector Ġthat Ġhas Ġcompleted Ġits Ġservice Ġcycle Ġfrom Ġa Ġdifferent ĠDI Ġcontext . Ċ Ġ*/ Ċ class ĠUse Telemetry Feature Ġconstructor ( private Ġval Ġinjector : ĠService Locator ) Ġ: ĠFeature Ġ{ ĊĠ Ġoverride Ġfun Ġconfigure ( context : ĠFeature Context ): ĠBoolean Ġ{ ĊĠĠĠ Ġcontext . register ( Telemetry Application EventListener :: class . java ) ĊĠĠĠ Ġcontext . register ( Bag gage Feature :: class . java ) ĊĊĠĠĠ Ġval Ġtelemetry Binder Ġ= Ġobject Ġ: ĠAbstract Binder () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġconfigure () Ġ{ ĊĠĠĠĠĠĠĠ Ġbind ( injector . getService ( Open Telemetry :: class . java )). to ( Open Telemetry :: class . java ). ` in `( Singleton :: class . java ) ĊĠĠĠĠĠĠĠ Ġbind ( injector . getService ( Tracer :: class . java )). to ( Tracer :: class . java ). ` in `( Singleton :: class . java ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext . register ( telemetry Binder ) ĊĊĠĠĠ Ġval Ġclient Ġ= ĠClient Builder . new Client () ĊĠĠĠĠĠ Ġ. register ( Client Telemetry Feature :: class . java ) ĊĠĠĠĠĠ Ġ. register ( Common Configuration :: class . java ) ĊĠĠĠĠĠ Ġ. register ( Logging Configuration :: class . java ) ĊĠĠĠĠĠ Ġ. register ( telemetry Binder ) ĊĊĠĠĠ Ġcontext . register ( object : ĠAbstract Binder () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġconfigure () Ġ{ ĊĠĠĠĠĠĠĠ Ġbind ( client ). to ( Client :: class . java ). ` in `( ĊĠĠĠĠĠĠĠĠĠ ĠSingleton :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} Ċ } Ċ Ċ class ĠTe lemetry Feature Ġ: ĠFeature Ġ{ ĊĠ Ġprivate Ġval Ġlog : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Telemetry Feature :: class . java ) ĊĊĠ Ġ@ Config Key (" telemetry . logging - enabled ") ĊĠ Ġvar Ġlog Telemetry : ĠBoolean ? Ġ= Ġfalse ĊĊĠ Ġinit Ġ{ ĊĠĠĠ ĠDecl ared Config Resolver . resolve ( this ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġconfigure ( context : ĠFeature Context ): ĠBoolean Ġ{ ĊĠĠĠ Ġcontext . register ( Telemetry Application EventListener :: class . java ) ĊĠĠĠ Ġcontext . register ( Bag gage Feature :: class . java ) ĊĊĠĠĠ Ġval Ġsdk Tracer Provider Ġ= ĠS dk Tracer Provider . builder () ĊĊĠĠĠ Ġif Ġ( log Telemetry Ġ== Ġtrue ) ĊĠĠĠĠĠ Ġsdk Tracer Provider . add Span Processor ( Simple Span Processor . create ( Logging Span Exporter ())) ĊĊĠĠĠ Ġval Ġopen Telemetry : ĠOpen Telemetry Ġ= ĠOpen Telemetry Sdk . builder () ĊĠĠĠĠĠ Ġ. set Tracer Provider ( sdk Tracer Provider . build ()) ĊĠĠĠĠĠ Ġ. set Propag ators ( ĊĠĠĠĠĠĠĠ ĠContext Propag ators . create ( ĊĠĠĠĠĠĠĠĠĠ ĠText Map Propag ator . composite ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠW 3 CB agg age Propag ator . getInstance (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠW 3 C Trace Context Propag ator . getInstance () ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ. build And Register Global () ĊĊĠĠĠ Ġval Ġtracer Ġ= Ġopen Telemetry . get Tracer (" feature hub ") ĊĊĠĠĠ Ġlog . info (" Open Telemetry Ġconfigured ") ĊĊĠĠĠ Ġval Ġclient Ġ= ĠClient Builder . new Client () ĊĠĠĠĠĠ Ġ. register ( Client Telemetry Feature :: class . java ) ĊĠĠĠĠĠ Ġ. register ( Common Configuration :: class . java ) ĊĠĠĠĠĠ Ġ. register ( Logging Configuration :: class . java ) ĊĊĠĠĠ Ġval Ġtelemetry Binder Ġ= Ġobject Ġ: ĠAbstract Binder () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġconfigure () Ġ{ ĊĠĠĠĠĠĠĠ Ġbind ( open Telemetry ). to ( Open Telemetry :: class . java ). ` in `( Singleton :: class . java ) ĊĠĠĠĠĠĠĠ Ġbind ( tracer ). to ( Tracer :: class . java ). ` in `( Singleton :: class . java ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext . register ( telemetry Binder ) ĊĠĠĠ Ġclient . register ( telemetry Binder ) ĊĊĠĠĠ Ġcontext . register ( object : ĠAbstract Binder () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġconfigure () Ġ{ ĊĠĠĠĠĠĠĠ Ġbind ( client ). to ( Client :: class . java ). ` in `( ĊĠĠĠĠĠĠĠĠĠ ĠSingleton :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} Ċ } Ċ