В последнее время я столкнулся с проблемой, что я не смог использовать последний стабильный валидатор hibernate (валидатор hiberante 4.3.0.Final) с операционной системой Glassfish 3.1.1.
Проблема в том, что в качестве модуля glassfish
используется более старая версия (
glassfish / modules / bean-validator.jar ). Если вы проверите содержимое пакета (в
MANIFEST.MF ), вы увидите, что используется версия
4.1.0.Final .
ОК, как с этим бороться? Я узнал, что я не единственный, у кого проблема здесь.
Предложение дало мне некоторую мотивацию, которую, кажется, можно достичь ?
Поскольку я использую ухо, простое решение, представленное в ответе, было для меня неосуществимым (так как это был военный случай). Хорошо, давайте посмотрим, как далеко мы можем получить. Есть несколько ссылок (в конце концов я получил следующие 2 ссылки):
- https://wikis.oracle.com/display/GlassFish/V3Jsr303BeanValidationIntegration
- http://weblogs.java.net/blog/editor/archive/2010/04/06/arun-gupta-how-create-osgi-bundles-using-netbeans-deployment-glassfis?force=760
Я прочитал последний, так как мне показалось хорошей идеей изучить создание модулей, развертываемых на glassfish, однако даже если я создал пакет maven osgi, он не содержал всех необходимых зависимостей, и дескриптор, похоже, был в порядке. Звучит как неправильный путь для меня тогда.
Вернувшись к 1-ой ссылке, я нашел следующий svn-репозиторий и попытался скомпилировать вещи:
https://svn.java.net/svn/glassfish~svn/trunk/external/source-build
Однако только после того, как это было достигнуто (и путь длился довольно долго) Я понял, что это просто перестраивает валидатор hibernate с его зависимостями, и это, конечно, не нужно, поскольку они уже собраны и доступны в общедоступных репозиториях maven :).
Хорошо, пройдя следующие шаги в статье, я получил следующее решение:
- проверенные источники стеклянной рыбы:
svn co https://svn.java.net/svn/hk2~svn/branches/hk2-gf-3.1.1/
- обновленный pom, связанный с проверкой бинов, см. мой diff
Index: pom.xml =================================================================== --- pom.xml (revision 4105) +++ pom.xml (working copy) @@ -54,9 +54,10 @@ maven-bundle-plugin and hk2-maven-plugin together --> <packaging>jar</packaging> <properties> - <hibernate-validator.version>4.2.0.Final</hibernate-validator.version> + <hibernate-validator.version>4.3.0.Final</hibernate-validator.version> <javax.validation.version>1.0</javax.validation.version> <slf4j.version>1.6.1</slf4j.version> + <jboss-logging.version>3.1.0.CR2</jboss-logging.version> </properties> <name>Validation API (JSR 303) version ${javax.validation.version}, Hibernate Validator version ${hibernate-validator.version} and its dependencies repackaged as OSGi bundle</name> @@ -89,7 +90,7 @@ <Embed-Dependency> <!-- Only specify root artifacts that need to be embedded, everything else will be pulled in automatically based on Private-Package settings. --> - *; artifactId=hibernate-validator|slf4j-api|slf4j-jdk14; inline=true + *; artifactId=hibernate-validator|jboss-logging|slf4j-api|slf4j-jdk14; inline=true </Embed-Dependency> <Export-Package> <!-- @@ -105,7 +106,7 @@ <Private-Package> <!-- Have a private copy of external non-standard dependencies --> - org.slf4j.*; com.googlecode.jtype.*; org.joda.time.*; org.jsoup.* + org.jboss.logging.*; org.slf4j.*; com.googlecode.jtype.*; org.joda.time.*; org.jsoup.* </Private-Package> <Import-Package> @@ -117,6 +118,12 @@ which is a JPA 2 class. --> org.slf4j; org.slf4j.spi; org.slf4j.helpers; version=${slf4j.version}; resolution:=optional, + org.jboss.logging; version=${jboss-logging.version}; resolution:=optional, + org.apache.log4j;resolution:=optional, + org.jboss.logmanager;resolution:=optional, + com.ibm.uvm.tools;resolution:=optional, + com.sun.jdmk.comm;resolution:=optional, + javax.jmdns;resolution:=optional, javax.persistence.*; version="2.0"; resolution:=optional, * </Import-Package> @@ -263,6 +270,13 @@ </dependency> + <dependency> + <groupId>org.jboss.logging</groupId> + <artifactId>jboss-logging</artifactId> + <version>${jboss-logging.version}</version> + <optional>true</optional> + </dependency> + <!-- We bundle jdk binding inside this OSGi bundle --> <dependency> <groupId>org.slf4j</groupId>
- постройки:
cd hk2-gf-3.1.1/external/bean-validator mvn clean install
- скопированы в модули Glassfish и удалены старые:
rm ${GLASSFISH_HOME}/glassfish/modules/bean-validator.jar cp hk2-gf-3.1.1/external/bean-validator/target/bean-validator-1.1.15-SNAPSHOT.jar ${GLASSFISH_HOME}/glassfish/modules/
- сделанный ?
Вопросы? хорошо, посмотрим позже, во время тестирования ? Но самая первая попытка сработала отлично.
Комментарии? Не стесняйтесь делиться, поскольку я не эксперт по ОСГИ (пока :)), поэтому некоторые из моих обновлений могут … допустим, не будут иметь большого смысла.