Embeddable distributed version control system in Java? - java

Is there a distributed version control system (like git or Mercurial) that can be used as an embedded library in Java applications (to implement versioned and synchronizable storage for application data), ideally written in pure Java and under a permissive license?

#Josh Moore's reply led me to JGit, which seems to be a competitor to JavaGit. JGit is pure Java and licensed under BSD.
Some further digging unearthed HgKit, which aims to implement Mercurial in Java. It is still pre-alpha and GPLed.

I do not know of any pure Java solutions. But, check out http://javagit.sourceforge.net/ you can use it to connect to a git repository with Java.

There is a pure Java library, SVN Kit for interacting with Subversion

Related

Is there a Java framework/assembly similar to the .NET Microsoft Enterprise Library?

I'm looking for a Java assembly similar to the Enterprise Library assembly that Microsoft wrote, which includes a Cryptography, Database, Logging, Security, Validation and other application blocks that wrap around the .NET framework. It's main purpose is to improve performance and to provide an API that makes it easier to build applications, so the application developer doesn't have to re-invent the wheel on the core libraries for doing common tasks. I'm primarily looking for a nice assembly for connecting to Oracle and SQL Server (for databases), as well as the other application blocks that I mentioned above. I am going to be building a bunch of reporting tools using a Java back-end and would like a jump start.
For Oracle and SQL Server, look for the JDBC drivers for each one (SQL Server here and Oracle here).
For cryptography, Java already comes with it bundled in, click here for docs.
For logging, there are many libraries:
Log4j
Logback
Java logging API
Security and validations are dependent on what kind of application you are using and there are many options other than the ones provided by Oracle itself, you need to provide more information what kind of app you are going to build so that people can provide better answers.
Also, most of the tools people use in the community are not provided by Oracle (this is a main difference between the Java and .Net ecosystem) so, you will find that there are many solutions on open source projects for the same problems and you will have to think, try and decide wich one of them to use.
I think you're describing Java EE. See:
http://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition
http://www.oracle.com/technetwork/java/javaee/overview/index.html

Mercurial v Git v Subversion

I need to choose a VCS to embed within a Java application I'm developing. The Java application will interact with the VCS via an API, but the user will also interact with it directly via an Eclipse plugin.
3 candidate VCS have been identified: Mercurial, Git and Subversion. I need to choose one based on the following criteria (in no particular order):
Java API. This is not 100% necessary, because the application could issue VCS commands via the command-line if no Java API is available. However, an API would obviously be preferable
Eclipse plugin
Simplicity. The people using the VCS (indirectly via the application or directly via Eclipse), will be software developers, but probably not the most sophisticated of the species.
Licensing. The license must permit to use of the VCS (in the manner described above) in a commercial application
There may be other considerations I've overlooked, I'll update the question if any more spring to mind.
Thanks!
Java API: Subversion has bindings for Java, and there is some kind of reimplementation of Mercurial in Java going on (see the dev mailing list).
Eclipse Plugin: There are plugins that support all three for Eclipse.
Simplicity: Subversion arguably has a simpler model being centralised. Mercurial tends to be simpler than Git to learn and use, while otherwise being quite close in features.
Licensing: Git and Mercurial are GPLed, but you can invoke them via the command line with no licensing implications. Subversion uses the Apache license, which is not copyleft.
Now - why not write an interface that abstracts the differences so you can support all three? Mercurial and Git are very similar, so it should be relatively straightforward to at least support these two.
First of all, I'd scratch out Subversion unless your application has a workflow that works especially well with a centralized VCS. And even then I'd try to use Mercurial or git since svn is just so slow.
Regarding Mercurial (hg) vs Git, I personally would choose git. On one hand, hg is simpler and more intuitive, but git is much faster and has much more mindshare than hg does.
Scriptability might be an issue though. Git is really made to be scriptable from a Unix shell (although it will run on windows with some gnu software installed). Hg has a python interface, but if I recall correctly has some C extensions that will probably make it impossible to use with jython. That said, it looks like there is a third-party git library for Java: http://eclipse.org/jgit/
Regarding licensing, hg and git are both GPLed, but if you shell out to them that shouldn't be an issue. SVN uses an Apache license, so it might win on this front (basically, you can do whatever you want with it).

Has Oracle removed Sun net.ftp classes?

I have an older project that uses the sun.net.ftp.FtpClient class to download a file from an ftp server. It appears that Oracle has finally removed this unsupported/deprecated feature from Java. Any suggestions on what should be used to replace it? I was considering org.apache classes but I have never used them. The best solution would be the simplest.
Dependending on your requirements i'd recommend to use either the FTP client provided by Apache Commons Net or edtFTP/j.
finj - FTP Client for Java Apps
What is finj ?
Sun provides
a FTP client written in Java as part of the standard classes.
Unfortunately, since the sun.net.ftp.* classes are not
part of the java.* packages, neither the source code
nor a complete API are available.
The goal of this project is to provide to developers a complete,
well designed, programmatically controllable Open-Source
FTP client written in the Java language. finj then simply stands for 'FTP in Java'.
It provides an API similar to sun.net.ftp.FtpClient so that you can use it without changing your code very much.

What is a BPMS?

What is BPMS? and when to go for BPMS? is there any free tools for .net or java? is there any plug-in available for eclipse?
It is short for Business Process Management System or Software and basically is a tool for very high level modelling how the business will do whatever they do and how automation tools are integrated.
These things are typically huge and composed of a big collection of tools and infrastructure stuff. Eclipse based tooling may be a part of that, but it is much larger than just a plugin.
If you want to dip your toe in these waters you might look at JBoss Tools which has support for JBPM and Webservices which is a workflow package and the infrastructure which is usually core to these systems.
Good Luck!
As Peter said, BPMS is a huge topic. To get an idea of its scope, check out IBM's home page on it here: http://www-142.ibm.com/software/products/us/en/category/bpm-software
Have a look at the Activiti BPMN 2.0 engine. It is still in beta but a project everybody interested in BPM software should know about. It is implemented in Java and an Eclipse plugin also will be part of the set of tools.
Stardust, the Eclipse Process Manager,is a comprehensive and mature BPMS which is part of the Eclipse release train since the Kepler release. With over 2.5M lines of code and 726 person years Stardust is the largest Open Source BPMS.
As opposed to many Java-centric BPMS, Stardust also provides proven .NET integration capabilities on servcie and UI level.
The process modeler is avalibe for Eclipse or purely browser-based. The runtime environment can be used from inside Eclipse (WTP integration) or standalone (maven build).
Please see http://www.eclipse.org/stardust/ for more details.
Best regards
Rob
BPM - Business Process Management is a systematic approach to streamline an organization’s process to make it efficient and effective, to suit the changing environment around.

Opensource packaging software for Mysql Server with Java Desktop Application

I have a Java desktop application which uses mysql database . Is there any Open source software for packaging or executable wrapper of Mysql server and Java desktop application into one single Exe/Debian package where i need not separately install Mysql server separately . Its like one click installer which installs everything and the application is ready to use. Thanks
The problem here is that MySQL is a standalone server, and cannot be easily embedded. You should use an embeddable or serverless database, such as :
SQLite (see the SQLite library for Java, containing all the server and the API in one jar)
Apache Derby (see the documentation for embedded use)
HyperSQL
Just so it's said here, if you are not a Open Source project, what you are trying to do is not only a problem technically but also could be one legally. From the mySQL license agreement:
For OEMs, ISVs, VARs and Other
Distributors of Commercial
Applications:
OEMs, ISVs, VARs and other
distributors that combine and
distribute commercially licensed
software with MySQL software and do
not wish to distribute the source code
for the commercially licensed software
under version 2 of the GNU General
Public License (the "GPL") must enter
into a commercial license agreement
with Sun.
You'll probably have to script something together and use the NSIS installer builder (which is free) for Windows.
For Debian it'll be just some scripts which have to be packaged together in a .deb.
But I really don't think there is a out of the box, or off the shelf solution for this.
Good luck :)

Categories