Thank you, TJ and Gavin.
Appreciate you taking the time to provide such helpful suggestions.
I will try these out and revert, in case I face any more issues.

Best Regards,
Raja Senapati

On 2023/11/08 18:53:54 TJ Banghart wrote:
> Hello Raja and welcome to Calcite!
>
> I have found it helpful to think of an Avatica server in terms of its main
> interfaces Service
> <
https://github.com/apache/calcite-avatica/blob/519d1ceeb04cd99530bceb60c1a8e0966c413541/core/src/main/java/org/apache/calcite/avatica/remote/Service.java#L59C7-L59C7
>
> and Meta
> <
https://github.com/apache/calcite-avatica/blob/519d1ceeb04cd99530bceb60c1a8e0966c413541/core/src/main/java/org/apache/calcite/avatica/Meta.java#L53
>.
> The service implementation determines what RPC message format to use as
> well as what RPCs are available. The meta implementation determines how
the
> server retrieves metadata, executes queries, etc.
> When starting the server we can supply both the service and meta
> implementations we want to use. In this case we want the server to access
> Calcite locally while using the generic Avatica driver from a JDBC client
> like DBeaver. For example (in Kotlin):
>
> class MyJdbcServer(port: Int) {
>     val meta: Meta = MyCalciteMetaFactory().create()
>     val service: Service = LocalService(meta)
>     val server: HttpServer = HttpServer(port, AvaticaJsonHandler(service))
>
>     ... methods to start/stop server etc...
> }
>
> class MyCalciteMetaFactory() : Meta.Factory {
>     override fun create(args: List<String?>?): Meta {
>         val info: Properties = ...some method to generate Calcite
> connection props...
>         val driver: Driver = Driver()
>         val connection: AvaticaConnection =
driver.connect("jdbc:calcite:",
> info) as AvaticaConnection?
>
>         return driver.createMeta(connection)
>     }
> }
>
>
> All RPCs from the JDBC client using the generic Avatica driver should be
> handled by the local CalciteMetaImpl
> <
https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java
>
> instance
> associated with the server. This is the same as if you had a local Calcite
> connection. Note that this will not work behind a load-balancer as local
> Calcite connections are "stateful" (see CALCITE-668
> <https://issues.apache.org/jira/browse/CALCITE-668>).
> I'm sure others might have a better way but this has worked for us so far!
>
> On Wed, Nov 8, 2023 at 9:00 AM Raja Ranjan Senapati <[email protected]>
> wrote:
>
> > Team,
> >   I am a newbie to Calcite and am excited about its potential. I have a
> > question. According to the status section on the docs page
> > <https://calcite.apache.org/docs/>, calcite supports Local and remote
JDBC
> > drivers using Avatica.  My interpretation of that statement is we can
wrap
> > any data source using Calcite and expose the data by creating a JDBC
> > server. This JDBC server can be accessed remotely using the remote
Calcite
> > JDBC driver, from tools such as DBeaver/DataGrip.
> >
> >  I can create a local JDBC wrapper on my data source and use it from the
> > same JVM. However, I cannot find any sample code that would create a
JDBC
> > server and serve remote clients using a remote JDBC server. I explored
> > concepts like Avatica Http Server
> > <
> >
https://calcite.apache.org/avatica/javadocAggregate/org/apache/calcite/avatica/server/HttpServer.html
> > >but
> > could not find any concrete implementation using Calcite. Can you please
> > point me to some references/samples? I think it would be awesome if you
> > could add this to some FAQ/Tutorial page in Calcite as well.
> >
> > Thanks,
> > Raja Senapati
> >
>
>
> --
>
> TJ
>

Reply via email to