<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="org.postgis.DriverWrapper" />
<property name="jdbcUrl" value="jdbc:postgresql_postGIS://localhost/database" />
<property name="user" value="postgres" />
<property name="password" value="postgres" />
</bean>
среда, ноября 18, 2009
Spring, C3PO, PostGIS
Если нужен PostGIS в Spring приложении с использованием в качестве пула соединений C3PO пиши следующее:
пятница, сентября 04, 2009
Jetty и запрет на JSESSIONID в url
Чтобы Jetty не совал JSESSIONID в url пишем:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<context-param>
<param-name>org.mortbay.jetty.servlet.SessionURL</param-name>
<param-value>none</param-value>
</context-param>
</web-app>
суббота, августа 22, 2009
Jetty и ограничение размера POST-запросов
В Jetty по умолчанию стоит ограничение в размере 20000 байт на POST-запрос. Если этот объем превысить, обязательно получишь java.lang.IllegalStateException: Form too large NNNNNN>200000
Увеличивать объем можно разными способами, один из которых запускать java с установленным параметром org.mortbay.jetty.Request.maxFormContentSize:
java -Dorg.mortbay.jetty.Request.maxFormContentSize=12345
Другой способ, на мой взгляд более грамотный, это помещение в WEB-INF файла jetty-web.xml следующего содержания:
Увеличивать объем можно разными способами, один из которых запускать java с установленным параметром org.mortbay.jetty.Request.maxFormContentSize:
java -Dorg.mortbay.jetty.Request.maxFormContentSize=12345
Другой способ, на мой взгляд более грамотный, это помещение в WEB-INF файла jetty-web.xml следующего содержания:
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
"http://jetty.mortbay.org/configure.dtd">
<Configure id="WebAppContext" class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="maxFormContentSize" type="int">6000000</Set>
</Configure>
понедельник, августа 03, 2009
C3PO, PostGIS
Если нужно поработать с PostGIS с использованием пула C3PO будет полезным следующий синглтон
Оно бы не стоило внимания, если бы C3PO давал напрямую работать с Connection, привести его тип к org.postgresql.PGConnection и добавить нужные типы методами PGConnection. Но C3PO дает прокси, у которого есть метод rawConnectionOperation, которому можно передать определение Method PGConnection и нужные аргументы.
import java.lang.reflect.Method;
import java.sql.Connection;
import com.mchange.v2.c3p0.C3P0ProxyConnection;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class ConnectionPool {
private ComboPooledDataSource pooled;
private static class ConnectionPoolHolder {
private final static ConnectionPool instance= new ConnectionPool();
}
public static ConnectionPool getInstance() {
return ConnectionPoolHolder.instance;
}
private ConnectionPool() {
try {
Class.forName( "org.postgresql.Driver" );
pooled = new ComboPooledDataSource();
pooled.setDriverClass( "org.postgis.DriverWrapper");
pooled.setJdbcUrl( "jdbc:postgresql_postGIS://localhost/database" );
pooled.setUser("postgres");
pooled.setPassword("postgres");
} catch (Exception e) {
e.printStackTrace();
}
}
public Connection getConnection() {
Connection con = null;
try {
con = pooled.getConnection();
C3P0ProxyConnection castCon = (C3P0ProxyConnection) con;
//((org.postgresql.PGConnection) con).addDataType("geometry",org.postgis.PGgeometry.class) ;
//((org.postgresql.PGConnection) con).addDataType("box3d",org.postgis.PGbox3d.class);
// Do the same
Method m = org.postgresql.PGConnection.class.getMethod("addDataType", new Class[]{String.class, Class.class});
Object[] args = new Object[] {"geometry",org.postgis.PGgeometry.class};
castCon.rawConnectionOperation(m, C3P0ProxyConnection.RAW_CONNECTION, args);
Object[] args2 = new Object[] {"box3d",org.postgis.PGbox3d.class};
castCon.rawConnectionOperation(m, C3P0ProxyConnection.RAW_CONNECTION, args2);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
public static void closeConnection(Connection o)
{
try
{ if (o != null) o.close();}
catch (Exception e)
{ e.printStackTrace();}
}
}
Оно бы не стоило внимания, если бы C3PO давал напрямую работать с Connection, привести его тип к org.postgresql.PGConnection и добавить нужные типы методами PGConnection. Но C3PO дает прокси, у которого есть метод rawConnectionOperation, которому можно передать определение Method PGConnection и нужные аргументы.
пятница, июля 10, 2009
maven 2 и отсутствие библиотеки в репозитории
Многие java-проекты собираются с помощью ant или ivy и они отсутствуют в публичных maven-репозиториях или публикуются там с большими опозданиями. Чтобы поместить сборку в локальный репозиторий используется mvn install:install-file, например:
mvn install:install-file -DgroupId=com.atg -DartifactId=json-taglib -Dversion=0.4.1 -Dfile=json-taglib-0.4.1.jar -Dpackaging=jar -DgeneratePom=true
Но я больше склоняюсь к тому, чтобы в таких случаях помещать библиотеку в проект, и в pom.xml в зависимостях указывать scope=system и в systemPath=относильный путь к файлу.
В случае web-проекта было бы так:
файл поместить соответственно в /src/main/webapp/WEB-INF/lib/
mvn install:install-file -DgroupId=com.atg -DartifactId=json-taglib -Dversion=0.4.1 -Dfile=json-taglib-0.4.1.jar -Dpackaging=jar -DgeneratePom=true
Но я больше склоняюсь к тому, чтобы в таких случаях помещать библиотеку в проект, и в pom.xml в зависимостях указывать scope=system и в systemPath=относильный путь к файлу.
В случае web-проекта было бы так:
<dependency>
<groupId>com.atg</groupId>
<artifactId>json-taglib</artifactId>
<version>0.4.1</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/json-taglib-0.4.1.jar</systemPath>
</dependency>
файл поместить соответственно в /src/main/webapp/WEB-INF/lib/
воскресенье, мая 03, 2009
Сборка Apache Axis2/Java 1.4.1 и SNAPSHOOT
Не стоило бы писать об этом, если бы все проходило гладко. Однако, приходится уделять внимание некоторым мелочам. Для сборки нужен Maven2.
Сборка Apache Axis2/Java 1.4.1
1. Скачиваем исходники Apache Axis2/Java 1.4.1 из релизов по пути, разархивируем
2. Собираем modules/tool/axis2-mar-maven-plugin и modules/tool/axis2-aar-maven-plugin/
3. В связи с тем что в modules/addressing/pom.xml ошибка с версиями правим строку
должно быть
4. Наконец собираем весь Axis2/Java
в корне запускаем
Этой же проблеме при сборке WSO2 частично посвящена заметка в блоге
Сборка Apache Axis2/Java из snv
Все это имеет отношение к ревизии 771052, последней на 03.05.2009
1. Скачиваем последнюю версию Axis2/Java с помошью SVN из
2. Собираем modules/tool/axis2-mar-maven-plugin и modules/tool/axis2-aar-maven-plugin/
3. В связи с тем что есть проблема в тестах (при сборке ругается Embedded error: C:\axis2source\modules\jaxws-integration\target\test-classes\servicejars\AppleFinderService not found) просто убираем из pom.xml всего проекта строку
4. Наконец собираем весь Axis2/Java
в корне запускаем
Сборка Apache Axis2/Java 1.4.1
1. Скачиваем исходники Apache Axis2/Java 1.4.1 из релизов по пути, разархивируем
2. Собираем modules/tool/axis2-mar-maven-plugin и modules/tool/axis2-aar-maven-plugin/
cd modules/tool/axis2-mar-maven-plugin
mvn clean install
cd ../axis2-aar-maven-plugin/
mvn clean install
3. В связи с тем что в modules/addressing/pom.xml ошибка с версиями правим строку
<version>1.41</version>
на <version>1.4.1</version>
должно быть
<artifactId>addressing</artifactId>
<packaging>mar</packaging>
<version>1.4.1</version>
<name>Apache Axis2 - Addressing</name>
далее строку <mar.version>1.41</mar.version>
на <mar.version>1.4.1</mar.version>
должно быть</build>
<properties>
<mar.version>1.4.1</mar.version>
</properties>
</project>
4. Наконец собираем весь Axis2/Java
в корне запускаем
mvn clean install -Dmaven.test.skip=true
Этой же проблеме при сборке WSO2 частично посвящена заметка в блоге
Сборка Apache Axis2/Java из snv
Все это имеет отношение к ревизии 771052, последней на 03.05.2009
1. Скачиваем последнюю версию Axis2/Java с помошью SVN из
2. Собираем modules/tool/axis2-mar-maven-plugin и modules/tool/axis2-aar-maven-plugin/
cd modules/tool/axis2-mar-maven-plugin
mvn clean install
cd ../axis2-aar-maven-plugin/
mvn clean install
3. В связи с тем что есть проблема в тестах (при сборке ругается Embedded error: C:\axis2source\modules\jaxws-integration\target\test-classes\servicejars\AppleFinderService not found) просто убираем из pom.xml всего проекта строку
<module>modules/jaxws-integration</module>
4. Наконец собираем весь Axis2/Java
в корне запускаем
mvn clean install -Dmaven.test.skip=true
Форматирование кода в блоге
Лично я сейчас использую http://formatmysourcecode.blogspot.com/ для небольших включений кода
и http://code.google.com/p/syntaxhighlighter со следующим руководством по установке для больших
А что используете вы?
Update 2009-11:
Как быть со второй версией SyntaxHighlighter отлично написано здесь. Имеются небольшие изменения - нужно добавлять в class префикс brush:
еще один Quick Escape
Для работы с таблицами есть неплохой online csv2html конвертор. Если таблица большая - есть смысл снабдить ее скроллерами путем помещения внутрь <div style="overflow: auto;"><table></table></div>
</build>
<properties>
<mar.version>1.4.1</mar.version>
</properties>
</project>
и http://code.google.com/p/syntaxhighlighter со следующим руководством по установке для больших
</build> <properties> <mar.version>1.4.1</mar.version> </properties> </project>
А что используете вы?
Update 2009-11:
Как быть со второй версией SyntaxHighlighter отлично написано здесь. Имеются небольшие изменения - нужно добавлять в class префикс brush:
еще один Quick Escape
Для работы с таблицами есть неплохой online csv2html конвертор. Если таблица большая - есть смысл снабдить ее скроллерами путем помещения внутрь <div style="overflow: auto;"><table></table></div>
пятница, января 16, 2009
Учим Seam жить только с Hibernate
Формула дня: Seam + JSF + Facelets + Hibernate + PostgerSQL в JBoss Developer Studio или в Eclipse+JBoss Tools
Если это то что вам нужно, то делаем следующее:
1. Открываем JBoss Developer Studio, создаем Seam Web Project
2. В /WebContent/WEB-INF/components.xml
пишем вместо <components следующее
далее убираем разделы
<persistence:managed-persistence-context..>
<persistence:entity-manager-factory..>
и вместо них добавляем
3. Создаем /src/model/hibernate.cfg.xml, в который пишем
4. Unдеплоим/удаляем *-ds.xml, persistence.xml
Если это то что вам нужно, то делаем следующее:
1. Открываем JBoss Developer Studio, создаем Seam Web Project
2. В /WebContent/WEB-INF/components.xml
пишем вместо <components следующее
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:persistence="http://jboss.com/products/seam/persistence"
xmlns:transaction="http://jboss.com/products/seam/transaction"
xmlns:drools="http://jboss.com/products/seam/drools"
xmlns:bpm="http://jboss.com/products/seam/bpm"
xmlns:security="http://jboss.com/products/seam/security"
xmlns:mail="http://jboss.com/products/seam/mail"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation= "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.1.xsd
http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.1.xsd
http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.1.xsd
http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.1.xsd
http://jboss.com/products/seam/bpm http://jboss.com/products/seam/bpm-2.1.xsd
http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.1.xsd
http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.1.xsd
http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.1.xsd">
далее убираем разделы
<persistence:managed-persistence-context..>
<persistence:entity-manager-factory..>
и вместо них добавляем
<persistence:hibernate-session-factory name="hibernateSessionFactory"/>
<!--наименование сессии ApplicationDatabase на свое усмотрение. Потом в экшенах используем @In Session ApplicationDatabase -->
<persistence:managed-hibernate-session name="ApplicationDatabase" session-factory="#{hibernateSessionFactory}" auto-create="true"/>
<transaction:hibernate-transaction session="#{ApplicationDatabase}"/>
3. Создаем /src/model/hibernate.cfg.xml, в который пишем
<!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="connection.driver_class">org.postgresql.Driver</property>
<!-- путь к северу-базе -->
<property name="connection.url">jdbc:postgresql://localhost:5432/postgres</property>
<!-- имя пользователя -->
<property name="connection.username">postgres</property>
<!-- пароль -->
<property name="connection.password">postgres</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="show_sql">false</property>
<property name="hbm2ddl.auto">create-drop</property>
<property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
<property name="transaction.flush_before_completion">true</property>
<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<!-- По мере создания здесь будем мапить сущности -->
<mapping class="org.domain.application.entity.myentity"/>
</session-factory>
</hibernate-configuration>
4. Unдеплоим/удаляем *-ds.xml, persistence.xml
вторник, января 06, 2009
Примеры JBoss Seam и Eclipse
Если вы хотите посмотреть примеры Seam в Eclipse, можно импортировать собранные веб-приложения. Вот здесь есть отличное описание того как импортировать. В общем и целом делаем следующее:
1. собираем ant-ом example из Seam
2. Импортируем war в Эклипс
3. Копируем из примеров сырцы
4. Импортим TestNG
Все.
Дополнительно полезные ссылки по настройке среды, серверов
How to make JBoss Seam work with Eclipse (for Windows)
RAD: Seam development with Eclipse and Tomcat Step-by-Step-Tutorial Screencast
HelloWorldSeam
Seam example with postgres
Tweaking JBoss Tools and Eclipse for Tomcat 6
Running JBoss' Seam on GlassFish
Setup of Seam 2.0 Applications for Tomcat 6.0
1. собираем ant-ом example из Seam
2. Импортируем war в Эклипс
3. Копируем из примеров сырцы
4. Импортим TestNG
Все.
Дополнительно полезные ссылки по настройке среды, серверов
How to make JBoss Seam work with Eclipse (for Windows)
RAD: Seam development with Eclipse and Tomcat Step-by-Step-Tutorial Screencast
HelloWorldSeam
Seam example with postgres
Tweaking JBoss Tools and Eclipse for Tomcat 6
Running JBoss' Seam on GlassFish
Setup of Seam 2.0 Applications for Tomcat 6.0
понедельник, января 05, 2009
VirtualBox и расширение виртуального диска
Полностью перешел на работе на VirtualBox, благо на рабочей станции хватает и процов и памяти. В 2.0.6. решили проблемы с тем что мелкософтовый офис на гостевой ОС файлы в шаре с хостовой ОС только на чтение видел, а в 2.1.0 наконец порядок навели со скоростью сетевых интерфейсов. Теперь у меня хостовая система будет всегда девственно чистая, исчезнут вопросы переустановки ОС каждые полгода. А виртуальных машин наклепал на все случаи жизни - одну для Серфинга, другую для ГИС/CAD, третью для VisualStudio, четвертую под Java, пятую для PostgreSQL/Tomcat под CentOS для тестов.
Но суть не в том.
Есть в VirtualBox возможность создания динамически расширяемого образа диска. Это диск, размер которого увеличивается по мере того как гостевая ось занимает все большее пространство. Вот делаешь себе такой диск на 6 Гб, устанавливаешь на нее Clean XP, которая на диске 2.5 Гб занимает, и клонируешь себе виртуальные диски с машинами на все случаи жизни. Все вроде отлично, но вдруг оказывается что 6 Гб мало, надо размеры динамического образа расширять до 20 Гб, и стоило так сделать с самого начала, а в Sun/Innotek как назло о таких как я не подумали. В итоге ищешь решения, коих много, но все имеют свои особенности.
Лично я для себя под вынь нашел следующую схему -
1. Создаю новый виртуальный диск нужного размера, подключаю его вторым к виртуальной машине
2. Загружаюсь в машину подключаю диск как базовый в гостевой выни
3. Запускаю snapshot.exe (http://www.drivesnapshot.de/en/down.htm) 250 кб
4. Делаю образ *.sna, сохраняю где-нибудь
5. Тут же ресторю образ на новый диск с его расширением до нужного размера
6. Делаю его загрузочным
Все, можно загружаться с нового диска. Практика показывает что слетают профиля. Ну это дело не страшное.
Но суть не в том.
Есть в VirtualBox возможность создания динамически расширяемого образа диска. Это диск, размер которого увеличивается по мере того как гостевая ось занимает все большее пространство. Вот делаешь себе такой диск на 6 Гб, устанавливаешь на нее Clean XP, которая на диске 2.5 Гб занимает, и клонируешь себе виртуальные диски с машинами на все случаи жизни. Все вроде отлично, но вдруг оказывается что 6 Гб мало, надо размеры динамического образа расширять до 20 Гб, и стоило так сделать с самого начала, а в Sun/Innotek как назло о таких как я не подумали. В итоге ищешь решения, коих много, но все имеют свои особенности.
Лично я для себя под вынь нашел следующую схему -
1. Создаю новый виртуальный диск нужного размера, подключаю его вторым к виртуальной машине
2. Загружаюсь в машину подключаю диск как базовый в гостевой выни
3. Запускаю snapshot.exe (http://www.drivesnapshot.de/en/down.htm) 250 кб
4. Делаю образ *.sna, сохраняю где-нибудь
5. Тут же ресторю образ на новый диск с его расширением до нужного размера
6. Делаю его загрузочным
Все, можно загружаться с нового диска. Практика показывает что слетают профиля. Ну это дело не страшное.
Подписаться на:
Сообщения (Atom)
Мой список блогов
-
-
Notes on LLMapгод назад
-
Строительноегод назад
-
Будем честными ...год назад
-
Highscalability is Up For Sale2 года назад
-
-
-
-
-
Go Composition vs Inheritance6 лет назад
-
Welcome, Prashanth!6 лет назад
-
Top Developer Collaboration Tools6 лет назад
-
Транспортный микс7 лет назад
-
-
Исповедь скрам тестера7 лет назад
-
-
Running JRuby on the Graal JIT7 лет назад
-
-
-
Скрепкус гигантус8 лет назад
-
Мои твиты8 лет назад
-
-
-
6990 рублей9 лет назад
-
-
Смирение и американские боеголовки9 лет назад
-
-
-
-
-
-
Measuring Activity Startup Time10 лет назад
-
-
-
-
-
Рассказ жителя Мариуполя из первых рук12 лет назад
-
-
Grails - Convention over Configuration12 лет назад
-
$ (dollar) prefix for angularJS12 лет назад
-
-
-
-
Блог закрыт!12 лет назад
-
-
Websphere portal. Create pages programmatically13 лет назад
-
-
-
Tweetbot для Mac13 лет назад
-
Scala-IO Core: Unmanaged Resources13 лет назад
-
Использование шрифтов в JasperReports13 лет назад
-
Аудит менеджмента качества13 лет назад
-
-
Windows 8 Camp14 лет назад
-
-
-
Переезд14 лет назад
-
CSP15 лет назад
-
-
Графоманам15 лет назад
-
ListView Multiple Selection 215 лет назад
-
-
-
UnitOfWork & IdentityMap17 лет назад
-
-
-
-
-
-
-
-
-