Embed Apache Calcite as a library in my application - embed

Apache Calcite seems to have an interesting functionality of parsing SQL and connecting to multiple data sources including non-relational using adapters.
I see enough documentation on development of calcite itself but not for using it as a library in a third party application.
I would like to use Apache Calcite along with some of its adapters as a library in my application and use its functionality.
For example, Apache Drill uses calcite in its backend. Is it possible for a third party application to embed calcite and use its functionality? If yes, how do I go about it? Thanks!

Maybe I am not understanding your question quite well.
Calcites power lies in its dedication on SQL optimisation, so sure you can use it.
are you talking about adding these into your 'maven' ?
<dependency>
<groupId>org.apache.calcite</groupId>
<artifactId>calcite-core</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.calcite</groupId>
<artifactId>calcite-avatica</artifactId>
<version>1.6.0</version>
</dependency>

Related

Json library for Cloud Dataproc

I need to find a json library for Google Cloud Dataproc.
I'm a bit not sure where can find a list of supported json libraries.
Or if I write my own, which dependencies can be taken into Dataproc?
Any data on this topic will be highly appreciated.
Best Regards,
Oleg
If you are talking about reading/parsing JSON objects, than you can use Gson library witch is a part of Hadoop distribution on Dataproc.
Also, you can use JSON library of your choice and any other dependencies, but you should create uber jar for your job and include all these libraries/dependencies into it.
If you are talking about Google JSON API Client libraries, than Dataproc by default deploys 1.20.0 version as part of GCS and BQ connectors. You still can use newer JSON API Client library version if you will relocate it inside your job's uber jar to avoid conflicts with version deployed to Dataproc.
See more detailed answer on conflicting dependencies management in Dataproc here.

Jruby rails - where should the java code go?

In my rails application I need to write some custom Java classes, so just wondering if there's any guidelines/best practice on how to structure the project repository? I mean like rails have a default directory structure in place, like app, models etc..., what should be the best place for my custom Java code?
I don't think there's a standard recommended practice, but there are a few options:
ruby-maven provides a DSL and a set of Rake plugins to build Java code the Maven way.
jruby-gradle-plugin provides similar support for the Gradle build tool.
For managing dependency libraries, there's also jar-dependencies.
If you're going to start writing Java/JVM code to go with your app, you'll probably need to integrate with the rest of the Java ecosystem at some point, and these tools are designed to support that.

How to add license metadata to maven dependencies?

When I add a dependency to my maven projects, I like to add some comments to indicate what it is, and what license it's released under, for example:
<!-- XML parser -->
<!-- Apache License, Version 2.0 -->
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.9.1</version>
<scope>compile</scope>
</dependency>
My main concern is being able to check (manually, for now) that the licenses are all compatible with one another. The pom.xml documentation states:
Note that a project should list only licenses that may apply directly to this project, and not list licenses that apply to this project's dependencies.
Is there a better way to capture this metadata? Maybe a way to "override" the <licenses> information from a dependency's POM if it's missing?
First of all you can't overwrite the licenses part of a pom, cause it's not inherited. Secondly you can automatically check the licenses of your dependencies using the Maven-Licenses-Verifier-Plugin (available via Maven Central) which will handle such a situation for you and furthermore you can generate a report about that (Example).
If I understand correctly, the Maven Remote Resources Plugin and the License Maven Plugin claim to be able to do this.
I have been working with the License Maven Plugin today and following their instructions I can generate a license report that indicates which licenses are missing. Then I can add the missing licenses and get a report on all the licenses in the project. However really I would like this information to be available when I generate the site, but there the license information for the third party dependencies is missing. It would also be useful to be able to add URLs for new licenses or URLs for the dependencies themselves (this information is also included in the site report).
I took a look at the plugin khmarbaise wrote for verifying if the dependencies used in a project but this does not help solve the problem of missing licenses.

jboss SAR instead of /tomcat/shared (alfresco for example)

Hey all,
I'm curious if you can use a jboss SAR to hold all the xml, class files, and even lib files that, if you were using tomcat, were traditionally in the /shared/classes, shared/lib locations into a SAR.
The intent is that instead of messing around in the jboss/conf/ directory to simply deploy an 'appconfig.sar' beside your actual app.war/app.ear.
Example usecase is Alfresco shared/classes/*..
thanks for any feedback!
I would say this depends on your JBoss version and the ClassLoadingConfiguration you're using. I can work, but then it can just as easily break in the next version of JBoss. JBoss 7 is very strict for example.
In general I would not rely on the specific behavior of a specific JBoss version and package my dependencies with my application. If you want to share dependencies between several .war then consider having then all in in an .ear and the dependencies in .ear/lib.

What configuration of JBoss should we used - web, standard, default?

We develop web application and we are going to deploy it on JBoss.
Now we use JSF, Facelets, Webflow, JMX, Spring.
We are going to use JMS(ActiveMQ).
Maybe in the future we will use EJB3. But for near future we will not use it.
What configuration of JBoss would be better to use - web, standard, default?
And why?
Go for the smallest config that does what you need. The "web" configuration seems to have everything you need, including ejb3 support.
Remember, the configurations in the distribution are just examples. It's perfectly acceptable to create custom server configs by copying the deployers and libs around to produce a config that does exactly what you need.
I've never found the need to use anything other than default, sometimes removing some of the config. And that's included JMS, EJB, Spring, Webflow, etc.
I you are using JBoss AS 5.1.X, I recommend this book: http://www.amazon.com/JBoss-AS-Development-Marchioni-Francesco/dp/1847196829
On page 31 there is a detailed explanation about the five provided configurations.