Java tutorial
/* * GeometryFacadeBean.java * * Using PostGIS Geometry Types with EJB2 - Proof of Concept * * Copyright 2006, Geodetix S.r.l. (http://www.geodetix.it) * and individual contributors as indicated by the @authors tag. * * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * */ package com.geodetix.geo.ejb; import com.geodetix.geo.exception.ApplicationGeoLayerException; import com.geodetix.geo.interfaces.GeometryLocalHome; import com.geodetix.geo.interfaces.GeometryLocal; import com.geodetix.geo.util.GeometryUtil; import com.geodetix.geo.value.GeometryValue; import org.apache.commons.logging.*; import org.postgis.*; import java.rmi.*; import java.util.*; import javax.ejb.*; import javax.naming.*; /** * A SessionFacade for managing Geometry beans. * * @ejb.bean * name="GeometryFacade" * jndi-name="geodetix/geo/GeometryFacade" * local-jndi-name="geodetix/geo/GeometryFacadeLocal" * type="Stateless" * view-type="both" * transaction-type="Container" * * @ejb.ejb-ref * ejb-name="Geometry" * view-type="local" * ref-name="ejb/GeometryLocal" * * @author <a href="mailto:antonio.pace@geodetix.it">Antonio Pace</a> */ public abstract class GeometryFacadeBean implements SessionBean { private SessionContext ctx; /** * EJB Initializer. * * @ejb.create-method */ public void ejbCreate() throws CreateException { } /** * Called after the EJB creation. */ public void ejbPostCreate() throws CreateException { } /** * Save the EJB session context. */ public void setSessionContext(SessionContext ctx) throws EJBException, RemoteException { this.ctx = ctx; } /* ============ Finder Methods ============== */ /** * Find all of the geometry beans contained in a <code>Polygon</code>. * * @ejb.interface-method * * @param polygon The Polygon to search in. */ public Collection findByPolygon(org.postgis.Polygon polygon) throws ApplicationGeoLayerException { try { GeometryLocalHome geometryHome = GeometryUtil.getLocalHome(); Collection geometries = geometryHome.findByPolygon(polygon); List result = new ArrayList(); for (Iterator iter = geometries.iterator(); iter.hasNext();) { GeometryLocal geometry = (GeometryLocal) iter.next(); result.add(geometry.getGeometryValue()); } return result; } catch (NamingException e) { throw new ApplicationGeoLayerException(e); } catch (FinderException e) { throw new ApplicationGeoLayerException(e); } } /* =============== Business Iinterfaces Methods ============= */ /** * Creates a new Geometry Bean. * * @ejb.interface-method * * @param geometry the <code>org.postgis.Geometry</code> that has to be * included in this EJB. * @param description the textual description of this bean. * @return a value object representing the created EJB. */ public GeometryValue createGeometry(org.postgis.Geometry geometry, String description) throws ApplicationGeoLayerException { try { GeometryLocalHome geometryHome = GeometryUtil.getLocalHome(); GeometryLocal geometryLocal = geometryHome.create(geometry, description); return geometryLocal.getGeometryValue(); } catch (NamingException e) { throw new ApplicationGeoLayerException(e); } catch (CreateException e) { throw new ApplicationGeoLayerException(e); } } /* ================== BMP Utility Methods ================= */ /** * Create a non-OpenGIS DataBase table used to persist the Geometry Beans. * <em>Note that in a real-world application this method should be protected * by using a role-based security policy.</em> * * @ejb.interface-method * * @throws ApplicationGeoLayerException thrown if an error occours * during table creation. */ public void createGeometryTable() throws ApplicationGeoLayerException { try { GeometryLocalHome geometryHome = GeometryUtil.getLocalHome(); geometryHome.makeDbTable(); } catch (NamingException e) { throw new ApplicationGeoLayerException(e); } catch (Exception e) { throw new ApplicationGeoLayerException(e); } } /** * Create an OpenGIS compliant database table used to persist the * Geometry Beans. * <em>Note that in a real-world application this method should be protected * by using a role-based security policy.</em> * * @ejb.interface-method * * @throws ApplicationGeoLayerException thrown if an error occours * during table creation. */ public void createGeometryTable(String gemetryType, int srid, int geometryDimension) throws ApplicationGeoLayerException { try { GeometryLocalHome geometryHome = GeometryUtil.getLocalHome(); geometryHome.makeDbTable(gemetryType, srid, geometryDimension); } catch (NamingException e) { throw new ApplicationGeoLayerException(e); } catch (Exception e) { throw new ApplicationGeoLayerException(e); } } /** * Remove the EJB's persistence table from the database. * <em>Note that in a real-world application this method should be protected * by using a role-based security policy.</em> * * @ejb.interface-method * * @throws ApplicationGeoLayerException thrown if an error occours * during table creation. */ public void dropGeometryTable() throws ApplicationGeoLayerException { try { GeometryLocalHome geometryHome = GeometryUtil.getLocalHome(); geometryHome.dropDbTable(); } catch (NamingException e) { throw new ApplicationGeoLayerException(e); } catch (Exception e) { throw new ApplicationGeoLayerException(e); } } }