Recently I had some problems with Mac OS Lion and I decided to do a clean install.
So all went well until I decided to install PostgreSQL with spatial extension called postgis and so the problems began.
My friend Kleber gave me a Gist with some simple steps to install postgresql and postgis after Lion update. So I was trying to follow those steps but it’s didn’t work.
So I searched for solutions and added in that new Gist.
Olá pessoa, sei que o blog anda meio parado. Os últimos 3 meses foram de muita correria, fui promovido no trabalho, assumindo o cargo de gerente do setor de desenvolvimento, o que tomou grande parte do meu tempo. Oxente Rails Fazendo um resumo dos últimos meses, em agosto estive em natal, no OxenteRails. Um evento de muita qualidade, recomendo a todos, em 2011 estarei lá novamente. Agradecimento ao meu grande amigo Karlisson que ofereceu hospedagem.
Software Freedom Day 2010
Em Setembro, estive em Campina Grande (cidade maravilhosa que espero ter o prazer de conhecer melhor) para palestrar no Software Freedom Day 2010 sobre Ruby On Rails e Desenvolvimento Ágil. Em breve estarei postando os slides da palestra aqui. Infelizmente estava um pouco doente e não conseguir ficar até o final do evento (minha voz acabou no momento que terminei minha palestra). Espero está lá novamente em 2011. Atualmente Estou no momento mexendo um pouco com aplicativos de Web Mapping com Ruby On Rails, já havia mexido com Java e agora como tenho dedicado meu tempo somente a Rails, achei interessante começar a fuçar. Para quem tem interesse, existe uma excelente Gem chamada Spatial_Adapter, que auxilia o ActiveRecord a tratar os dados geográficos. Atualmente os Bancos suportados são: PostgreSQL (com sua extensão espacial Postgis) e o MySQL. E para quem quer utilizar o Google Maps para exibição dos mapas no seu aplicativo, também já existe uma Gem para isso, a google_maps. Resumindo é isso, tentarei postar pelo menos mensalmente no blog. Happy Hack ;-)Esse tutorial tem como objetivo fazer uma introdução ao uso do Hibernate Spatial juntamente com o banco de dados postgresql e a extensão espacial postgis. Nesse exemplo estarei utilizando o netbeans 6.8. Para começar, crie um projeto Java no netbeans, clique com o botão direito sobre o projeto e adicione as bibliotecas do “Hibernate” e “Hibernate JPA” ambas disponíveis no netbeans. Você também irá precisar das seguintes bibliotecas:
Adicione todas as listadas acima ao projeto. Agora iremos criar o hibernate.cfg.xml, o próprio netbeans fornece um utilitário para criação. Clique com o botão direito no projeto, selecione o menu Novo -> Outro -> Hibernate -> Assistente para configuração do hibernate. Configure seu hibernate da seguinte maneira: [sourcecode language=”xml”] <?xml version=”1.0” encoding=”UTF-8”?> <!DOCTYPE hibernate-configuration PUBLIC “-//Hibernate/Hibernate Configuration DTD 3.0//EN” “http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”> <hibernate-configuration> <session-factory> <property name=”hibernate.dialect”>org.hibernate.dialect.PostgreSQLDialect</property> <property name=”hibernate.connection.driver_class”>org.postgresql.Driver</property> <property name=”hibernate.connection.url”>jdbc:postgresql://localhost/teste</property> <property name=”hibernate.connection.username”>postgres</property> <property name=”hibernate.connection.password”>web</property> <property name=”hibernate.show_sql”>true</property> <property name=”hibernate.format_sql”>true</property> <mapping class=”modelo.Evento”/> </session-factory> </hibernate-configuration> [/sourcecode] Agora iremos criar a classe “Eventos” que será nossa entidade. Ela irá conter o atributo Id que será um inteiro, descrição que será uma string contendo a descrição e o atributo ponto que será do tipo geográfico “Point”. [sourcecode language=”java”] package modelo; import com.vividsolutions.jts.geom.Point; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.hibernate.annotations.Type; /** * * @author lucas */ @Entity public class Evento implements Serializable { @Id @GeneratedValue private long id; private String descricao; @Type(type=”org.hibernatespatial.GeometryUserType”) @Column(columnDefinition=”Point”) private Point ponto; public String getDescricao() { return descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } public long getId() { return id; } public void setId(long id) { this.id = id; } public Point getPonto() { return ponto; } public void setPonto(Point ponto) { this.ponto = ponto; } } [/sourcecode] Agora criaremos a classe HibernateUtil, que possuirá um atributo SessionFactory do hibernate, um método que retorne uma Session criada pelo SessionFactory e um bloco de código, todos estáticos. O próprio netbeans possui uma opção de criar automaticamente o HibernateUtil, ela está no mesmo menu que foi usado anteriormente para gerar o arquivo de configuração. [sourcecode language=”java”] package util; import org.hibernate.Session; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.SessionFactory; public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); } catch (Throwable ex) { throw new ExceptionInInitializerError(ex); } } public static Session getSession() { return sessionFactory.openSession(); } } [/sourcecode] Criaremos agora a classe que irá ler a configuração do hibernate e a partir dos mapeamentos das classes irá gerar automaticamente as tabelas do banco. [sourcecode language=”java”] package util; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; /** * * @author lucas */ public class GeraBanco { public static void main(String args[]){ Configuration conf = new AnnotationConfiguration(); conf.configure(); SchemaExport se = new SchemaExport(conf); se.create(true, true); } } [/sourcecode] O próximo passo é mapear a entidade Evento no hibernate, para isso adicionaremos abaixo do último ‘property’ a linha a seguir: [sourcecode language=”xml”] <mapping class=”modelo.Evento”/> [/sourcecode] Deixando o hibernate.cfg.xml da seguinte maneira: [sourcecode language=”xml”] <?xml version=”1.0” encoding=”UTF-8”?> <!DOCTYPE hibernate-configuration PUBLIC “-//Hibernate/Hibernate Configuration DTD 3.0//EN” “http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”> <hibernate-configuration> <session-factory> <property name=”hibernate.dialect”>org.hibernate.dialect.PostgreSQLDialect</property> <property name=”hibernate.connection.driver_class”>org.postgresql.Driver</property> <property name=”hibernate.connection.url”>jdbc:postgresql://localhost/teste</property> <property name=”hibernate.connection.username”>postgres</property> <property name=”hibernate.connection.password”>web</property> <property name=”hibernate.show_sql”>true</property> <property name=”hibernate.format_sql”>true</property> <mapping class=”modelo.Evento”/> </session-factory> </hibernate-configuration> [/sourcecode] E por fim iremos trabalhar na classe main: [sourcecode language=”java”] import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Point; import modelo.Evento; import org.hibernate.Session; import org.hibernate.Transaction; import util.HibernateUtil; /** * * @author lucas */ public class Main { public static void main(String[] args) { Evento evento = new Evento(); evento.setDescricao(“Testando”); Geometry geom = null; evento.setPonto((Point) geom); Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); session.save(evento); tx.commit(); session.close(); } } [/sourcecode] Agora rode o GeraBanco para que a tabela do banco seja criada e em seguinda o main. Após fazer isso dê uma conferida no banco e se tiver ocorrido tudo bem o registro estará lá.O Hibernate Spatial é uma extensão do famoso framework de persistência Hibernate. Ele faz o mapeamento objeto relacional de tipos de dados geográficos. Para quem trabalha com desenvolvimento de SIG é uma excelente idéia dá uma conferida.
Ele suporta a maioria das funções da OGC (Open Geospatial Consortium) além de suportar também os SGBD Oracle 10g/11g, Postgresql/Postgis, and MySQL.
O site oficial é http://www.hibernatespatial.org/ e para quem trabalha com a plataforma .NET NHibernate