Wednesday, November 23, 2011

Inner type methods in multiple classes with Aspect Oriented languages


Declaring inner type methods in multiple classes with Aspect Oriented languages

Aspect Oriented Languages are not made for declare methods, but, we can use this powerful new paradigm to to this, when composite or inheritance aren't the best approach.

Andy Clement, engaged with the AspectJ project, answer me there is a good way to do this. The follow example is in AspectJ.

Declare an interface:
interface Holder {}
Make your intertype declarations on the interface:
public int Holder.getMeAnInt() {
  return 42;
}
Declaring a method on a interface, in aspects, you are providing a 'default implementation'. If you create a class Foo that implements this interface and don't implement the getMeAnInt() method explicitly, for example, the new Foo class will have the implementation declared on this interface.
The final piece of the puzzle is then to use declare parents to specify which group of types implement your interface:
declare parents: @Anno * implements Holder;
So now, any type annotated with @Anno will implement Holder and have the getMeAnInt() method.

References

  • StackOverFlow. Available in: http://stackoverflow.com/questions/3738545/aspectj-creating-innter-type-methods-in-multiple-classes Accessed in November of 2010.
  • AspectJ. Available in: http://www.eclipse.org/aspectj/ Accessed in November of 2010.
  • Wikipedia. Available in: http://en.wikipedia.org/wiki/Aspect-oriented_programming Accessed in November of 2010

Changing the line size of a JFreeChart chart

This is an example showing how to change the line size of a Java graph builded with JFreeChart library.

The example is using the version JFreeChart 1.0.13

...
private JFreeChart createChart(XYDataset dataset, ICarteira car) {
// create the chart...
final JFreeChart chart = ChartFactory.createTimeSeriesChart(
car.getNome(), // title
"Tempo", // x axis label
"Valor", // y axis label
dataset, // data
true, // include legend
true, // tooltips
true // urls
);
XYPlot plot = chart.getXYPlot();
// here we change the line size
int seriesCount = plot.getSeriesCount();
for (int i = 0; i < seriesCount; i++) {
plot.getRenderer().setSeriesStroke(i, new BasicStroke(2));
}
// line size changed
return chart;
}
...

Catálogo de tecnologias e ferramentas Java (Portuguese)


Frameworks e ferramentas para construção de sistemas compatíveis com a plataforma Java

A forma mais rápida de desenvolver software com qualidade é através do reuso. Nesse documento é apresentado uma lista de bibliotecas e frameworks estáveis para desenvolvimento de aplicações. Os critérios para o framework estar aqui são: ser grátis para aplicações comerciais, inclusive as não open source; ser amplamente utilizado pelo mundo; ser confiável para uso em produção.


Introdução

Reuso de componentes é uma maneira de criar aplicações de altíssima qualidade em tempo relativamente curto. Porém, deve-se ter muito cuidado com o uso abusivo. Apesar de ser errado reinventar as coisas, à medida que aumenta o uso de componentes, aumenta-se também a complexidade da integração da solução, uma vez que é composta de várias partes integradas. 

Mas com uma boa dose de bom senso é possível reaproveitar tudo o que existe sem comprometer o seu software. 

A seguir, dividido por categorias, são listados os frameworks, tecnologias, ferramentas e bibliotecas.


Acesso à dados



AOP (Orientação à Aspectos)



Configurações de sistema



Comentários



Documentação



Ferramentas RAD (Desenvolvimento rápido de aplicações)

  • Spring Roo
  • WaveMaker: IDE RAD java que roda no browser. Ideal para desenvolvimento de pequenos módulos/aplicações. Possui versão community e na nuvem.



Instaladores



Javascript





Logs



Multimídia



OSGi



Pagamentos



Prototipação de interfaces



RSS/Atom

  • RomeRome é um conjunto de ferramentas open source para parseamento, geração e publicação defeeds com RSS e Atom.


Redes Sociais



Servidores/Hosting/Cloud computing



SCM (Source Code Management)




Teste



Util

  • Stella. Biblioteca brasileira para validação de CPF/CNPJ, geração de boletos bancários e outras funções utilitárias.
  • Apache Commons Lang. Uma série de classes utilitárias para realização de pequenas operações em Java.


Web