<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Maven &#8211; Jiří Kratochvíl</title>
	<atom:link href="https://jiri.kratochvil.eu/tag/maven/feed/" rel="self" type="application/rss+xml" />
	<link>https://jiri.kratochvil.eu</link>
	<description>Kráťovo občasník</description>
	<lastBuildDate>Tue, 29 Mar 2011 19:03:46 +0000</lastBuildDate>
	<language>cs</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7</generator>

<image>
	<url>https://jiri.kratochvil.eu/wp-content/uploads/2018/10/kratochvil-logo-100x100.png</url>
	<title>Maven &#8211; Jiří Kratochvíl</title>
	<link>https://jiri.kratochvil.eu</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">10187198</site>	<item>
		<title>Testování JMS v unit testech</title>
		<link>https://jiri.kratochvil.eu/testovani-jms-v-unit-testech/</link>
					<comments>https://jiri.kratochvil.eu/testovani-jms-v-unit-testech/#respond</comments>
		
		<dc:creator><![CDATA[Jiří Kratochvíl]]></dc:creator>
		<pubDate>Tue, 29 Mar 2011 19:03:46 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Návody]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[JMS]]></category>
		<category><![CDATA[JNDI]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Messaging]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Tipy]]></category>
		<category><![CDATA[Transaction Manager]]></category>
		<category><![CDATA[Unit test]]></category>
		<category><![CDATA[Weblogic]]></category>
		<guid isPermaLink="false">http://jiri.kratochvil.eu/?p=389</guid>

					<description><![CDATA[Dnes jsem strávil skoro celý den tím, že jsem potřeboval vyřešit následující problém. Mám aplikaci, která poměrně sofistikovaně využívá několik JMS front pro asynchronní zpracování [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Dnes jsem strávil skoro celý den tím, že jsem potřeboval vyřešit následující problém. Mám aplikaci, která poměrně sofistikovaně využívá několik JMS front pro asynchronní zpracování požadavků z klientských aplikací. Celé je to postavené nad serverem Weblogic a aplikace využívá frameworku Spring. Další komplikací je, že veškeré fronty jsou v aplikačním kontextu získávány z JNDI, včetně konektivity do databáze. Na následujících řádcích zkusím popsat, jak jsem se s tímto problémem popasoval. Budu rád za jakékoliv reakce, co jsem měl udělat lépe a co jsem udělal špatně.<br />
<span id="more-389"></span><br />
Abych se vyhnul polemice, co je a co není unit testování a jestli nemám špatně navrženou aplikaci, když musím řešit JMS, JNDI apod., pak vězte, že implementaci jsem nepsal a implementaci jsem nesměl refaktorovat, protože se jednalo o celkem zásadní funkcionalitu, která se nachází těsně před ostrým nasazením a můj projektový vedoucí se obával toho, že kdybych provedl nějaký větší refactoring, mohlo by to způsobit v této fázi projektu více škody nežli užitku. </p>
<p>Ale i přesto bylo potřeba do této implementace doimplementovat několik požadavků. Rozhodl jsem se nejprve stávající implementaci pokrýt testy tak, abych tím, co tam doplním nerozbil to, co již funguje. A zde jsem trochu narazil. Implementace tohoto modulu je velice těsně spjata s JMS implementací Weblogicu a navíc tak, že se jedná o několik front, které jsou vzájemně propojeny a zpráva zkrze ně postupně &#8222;propadává&#8220; podle definovaných pravidel. </p>
<p>Abych to celé byl tedy schopen spustit jako unit test, musel jsem vyřešit pár &#8222;drobností&#8220;, a to poskytovatele <strong>JNDI kontextu</strong>, <strong>transaction manager</strong> a vlastní implementaci <strong>JMS</strong>. Pro JNDI kontextu jsem jednoduše využil prostředků Springu. Pro transakční manager jsem využil <a href="http://docs.codehaus.org/display/BTM/Home">Bitronix Transaction Manager</a> a pro messagingové služby padlo rozhodnutí na <a href="http://activemq.apache.org/">Apache ActiveMQ</a>.</p>
<h2>JNDI kontext</h2>
<p>Vytvoření vlastního JNDI kontextu je ve Springu triviální úloha. Já jsem si pro to napsal jednoduchou utilitku, která mi ji ještě více zjednodušuje:</p>
<pre lang="java">
package eu.kratochvil.utils.spring;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.mock.jndi.SimpleNamingContextBuilder;

import java.util.HashMap;
import java.util.Map;

/**
 * Simple implementation of JNDI context that should be used in unit-tests
 * within Spring context.
 * <p/>
 * Basic usage is simple:
 * 
 * &lt;bean id="jndiContext" class="cz.isvs.reg.ros.ws.repository.util.MockSpringJndiContext"&gt;
 *   &lt;property name="jndiContext"&gt;
 *      &lt;map&gt;
 *          &lt;entry key="ros.VstupniFronta" value-ref="destinationVstupniFronta"/&gt;
 *          &lt;entry key="ros.VystupniFronta" value-ref="destinationVystupniFronta"/&gt;
 *          &lt;entry key="weblogic.jms.XAConnectionFactory" value-ref="activeMQConnectionFactory"/&gt;
 *      &lt;/map&gt;
 *   &lt;/property&gt;
 * &lt;/bean&gt;
 *
 * There isn't needet to use something like <code>jndi.properties</code> because jndi context is define
 * directly inside spring context. 
 *
 * @author Jiri Kratochvil (jiri.kratochvil@jetminds.com)
 */
public class MockSpringJndiContext implements InitializingBean {

    public static final Logger logger = LoggerFactory.getLogger(MockSpringJndiContext.class);

    Map<String, Object> jndiContext = new HashMap<String, Object>();

    public void setJndiContext(Map<String, Object> jndiContext) {
        this.jndiContext = jndiContext;
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        logger.info("Initializing JNDI context");
        SimpleNamingContextBuilder builder = SimpleNamingContextBuilder.emptyActivatedContextBuilder();
        for (Map.Entry entry : jndiContext.entrySet()) {
            logger.debug("Binding {} in JNDI context", entry.getKey().toString());
            builder.bind(entry.getKey().toString(), entry.getValue());
        }
    }
}
</pre>
<p>Použití je pak naprosto triviální:</p>
<pre lang="xml">
    <bean id="jndiContext" class="cz.isvs.reg.ros.ws.repository.util.MockSpringJndiContext">
        <property name="jndiContext">
            <map>
                <entry key="jms.queue1" value-ref="destinationQueue1"/>
                <entry key="jms.queue2" value-ref="destinationQueue2"/>
                <entry key="weblogic.jms.XAConnectionFactory" value-ref="connectionFactory"/>
            </map>
        </property>
    </bean>
</pre>
<p>Inicializací tohoto springového beanu se vytvoří JNDI kontext, který obsahuje dvě JMS fronty a ještě connection factory, o které budu mluvit dále. Pokud použijete Spring není potřeba dále definovat jak se k JNDI kontextu připojit, což se běžně dělá pomocí property souboru <code>jndi.properties</code> umístěném na classpath.</p>
<h2>JMS server</h2>
<p>Dále tedy potřebujeme vytvořit instanci embedovaného JMS serveru. Pro mé účely jsem zvolil <a href="http://activemq.apache.org/">Apache ActiveMQ</a>, který jde snadno inicializovat pomocí Springu, kde to vypadá následovně:</p>
<pre lang="xml">
   <!-- Definice message brokeru -->
    <amq:broker useJmx="false" persistent="false">
        <amq:transportConnectors>
            <amq:transportConnector uri="tcp://localhost:8888"/>
        </amq:transportConnectors>
    </amq:broker>

    <!-- Connection Factory pro message broker -->
    <bean id="activeMQConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://localhost:8888"/>
    </bean>

    <!-- Vlastni definice front -->
    <amq:queue id="destinationQueue1" physicalName="jms.queue1"/>
    <amq:queue id="destinationQueue2" physicalName="jms.queue2"/>

    <!-- listener pro zachytavani vyjimek z JMS (implemetnace rozhrani javax.jms.ExceptionListener) -->
    <bean id="jmsExceptionListener" class="eu.kratochvil.blog.ukazky.JmsExceptionListenerImpl" />

    <!-- Springova implementace connection factory, ktera bude vyuzita pro registraci listeneru a pro 
            posilani zprav prostrednictvim springove JmsTemplate -->
    <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
        <constructor-arg ref="activeMQConnectionFactory"/>
        <property name="exceptionListener" ref="jmsExceptionListener"/>
        <property name="sessionCacheSize" value="100"/>
    </bean>
</pre>
<p>Popis co a proč je použito v předchozím listingu jsou přímo v něm, tedy ve stručnosti. Vytvořili jsme si instanci message brokeru, který nám nahrazuje vlastní JMS server v aplikačním serveru, následně jsme zadefinovali jednotlivé fronty, které jsou použity ve vlastní implementaci business logiky a konečně connection factory, která nám umožní napojení vlastních listenerů JMS front a zároveň přes ni budeme posílat testovací zprávy z našit unit testů. </p>
<p>Nyní bych se ještě vrátil k tomu, proč jsem do JNDI kontextu umístil <code>weblogic.jms.XAConnectionFactory</code>. Důvod je takový, že aplikace, které využívají JMS ve Weblogiku by měli referenci na connection factory získávat právě z JNDI. </p>
<h2>Transaction Manager</h2>
<p>Poslední věc, kterou musíme vyřešit bez aplikačního serveru je transaction manager &#8211; tedy &#8222;něco&#8220;, co nám bude řídit vlastní transakce. Na to jsem použil <a href="http://docs.codehaus.org/display/BTM/Home">Bitronix Transaction Manager</a> což je celkem mocná implementace transakčního manažeru. Pro naše účely bude použití triviální:</p>
<pre lang="xml">
      <!--  Bitronix Transaction Manager embedded configuration -->
    <bean id="btmConfig" factory-method="getConfiguration" class="bitronix.tm.TransactionManagerServices">
        <property name="serverId" value="spring-btm" />
        <property name="journal" value="null" />
    </bean>

    <!-- create BTM transaction manager -->
    <bean id="bitronixTransactionManager" factory-method="getTransactionManager"
        class="bitronix.tm.TransactionManagerServices" depends-on="btmConfig,dataSource"
        destroy-method="shutdown" />

    <bean id="transactionManager"
        class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="transactionManager" ref="bitronixTransactionManager" />
        <property name="userTransaction" ref="bitronixTransactionManager" />
        <property name="allowCustomIsolationLevels" value="true" />
    </bean>
</pre>
<h2>Závěrem</h2>
<p>Kouzlo tohoto použití je v tom, že nyní stačí spustit unit test, který inicializuje springový kontext a zároveň načte definici kontextu vlastní aplikace, která právě využívá JNDI pro získání referencí na fronty a vše by mělo fungovat stejně, jako kdybychom tuto implementaci měli deployovanou přímo na aplikačním serveru. Pro úplnost dodávám ukázku definice kontextu přímo v aplikaci:</p>
<pre lang="xml">
    <!-- ===================== JNDI =========================================== -->
    <jee:jndi-lookup id="jmsConnectionFactory" jndi-name="weblogic.jms.XAConnectionFactory"/>
    <jee:jndi-lookup id="vstupniFronta" jndi-name="jms.queue1"/>
    <jee:jndi-lookup id="vystupniFronta" jndi-name="jms.queue2"/>

    <!-- JTA transakce -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!-- ===================== FRONTY ========================================= -->
    <bean id="jmsTemplate" class="corg.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="jmsConnectionFactory"/>
        <property name="messageConverter" ref="simpleMessageConverter"/>
    </bean>

    <bean id="simpleMessageConverter" class="org.springframework.jms.support.converter.SimpleMessageConverter"/>

    <bean id="destinationResolver" class="org.springframework.jms.support.destination.BeanFactoryDestinationResolver"/>

    <jms:listener-container connection-factory="jmsConnectionFactory" transaction-manager="transactionManager"
                            destination-resolver="destinationResolver"
                            message-converter="simpleMessageConverter">
        <jms:listener destination="destinationQueue1" ref="messageBroker" method="processVstupni"
                      selector="MessageType='test1'"/>
        <jms:listener destination="destinationQueue2" ref="messageBroker" method="processVystupni"
                      selector="MessageType='test2'"/>
    </jms:listener-container>

    <bean id="messageBroker" class="eu.kratochvil.blog.ukazky.MyMessageBroker" />
</pre>
<p>Na celém tomto cvičení je pěkné to, že jednoduchou springovou konfigurací jsme schopni rozchodit určitou část aplikace, která za normálních okolností nelze bez aplikačního serveru spustit, a my si tak můžeme napsat testy, které lze snadno spouštět bez neustálého a otravného redeploymentu na aplikační server.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jiri.kratochvil.eu/testovani-jms-v-unit-testech/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">389</post-id>	</item>
		<item>
		<title>SSL in Jetty plug-in</title>
		<link>https://jiri.kratochvil.eu/ssl-in-jetty-plug-in/</link>
					<comments>https://jiri.kratochvil.eu/ssl-in-jetty-plug-in/#respond</comments>
		
		<dc:creator><![CDATA[Jiří Kratochvíl]]></dc:creator>
		<pubDate>Wed, 20 Oct 2010 06:00:11 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Návody]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Tipy]]></category>
		<guid isPermaLink="false">http://jiri.kratochvil.eu/?p=342</guid>

					<description><![CDATA[Yesterday I had a chat with my colleague. We talked about how the Maven Jetty plug-ins enable SSL. In my last article I described how [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Yesterday I had a chat with my colleague. We talked about how the Maven Jetty plug-ins enable SSL. In my last article I described how to enable SSL in Tomcat, so now let&#8217;s see how to achieve the same result in the Jetty plugin.<br />
<span id="more-342"></span><br />
It is a few simple steps.</p>
<p>At first we have to create a keystore with a server certificate:</p>
<pre lang="bash">
keytool-genkey-alias-jetty6 keyalg RSA-keystore target / jetty-ssl.keystore-storepass changeit-keypass changeit-DNAME "CN = Your Domain Name"
</pre>
<p>Then modify the configuration of the Maven pom.xml:</p>
<pre lang="xml">
<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>
    <configuration>
        <contextPath>/context</contextPath>
        <scanIntervalSeconds>5</scanIntervalSeconds>
        <connectors>
            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                <port>8080</port>
                <maxIdleTime>60000</maxIdleTime>
            </connector>
            <connector implementation="org.mortbay.jetty.security.SslSocketConnector">
                <port>8443</port>
                <maxIdleTime>60000</maxIdleTime>
                <keystore>${project.build.directory}/jetty-ssl.keystore</keystore>
                <password>changeit</password>
                <keyPassword>changeit</keyPassword>
            </connector>
        </connectors>
    </configuration>
</plugin>
</pre>
<p>In the previous configuration, we defined the connection on port 8080 and port 8443 for SSL connections.</p>
<p>If we did not want to manually generate a server certificate, you can use other Maven plugin as shown below.</p>
<pre lang="xml">
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>keytool-maven-plugin</artifactId>
    <executions>
        <execution>
            <phase>generate-resources</phase>
            <id>clean</id>
            <goals>
                <goal>clean</goal>
            </goals>
        </execution>
        <execution>
            <phase>generate-resources</phase>
            <id>genkey</id>
            <goals>
                <goal>genkey</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <keystore>${project.build.directory}/jetty-ssl.keystore</keystore>
        <dname>cn=localhost</dname>
        <keypass>changeit</keypass>
        <storepass>changeit</storepass>
        <alias>jetty6</alias>
        <keyalg>RSA</keyalg>
    </configuration>
</plugin>
</pre>
<p>Now, when we invoke <code>mvn jetty: run</code> command, plug-in automatically creates a certificate that is then used in Jetty.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jiri.kratochvil.eu/ssl-in-jetty-plug-in/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">342</post-id>	</item>
		<item>
		<title>Nepříjemný bug v Mavenu</title>
		<link>https://jiri.kratochvil.eu/neprijemny-bug-v-mavenu/</link>
					<comments>https://jiri.kratochvil.eu/neprijemny-bug-v-mavenu/#comments</comments>
		
		<dc:creator><![CDATA[Jiří Kratochvíl]]></dc:creator>
		<pubDate>Wed, 04 Nov 2009 00:23:46 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Spring]]></category>
		<guid isPermaLink="false">http://blog.kratochvil.eu/?p=133</guid>

					<description><![CDATA[Na projektu používáme pro build nástroj Maven ve verzi 2.0.9. Jedná se o perfektní nástroj do doby, kdy pracuje tak, jak má. Ve chvíli, kdy [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Na projektu používáme pro build nástroj Maven ve verzi 2.0.9. Jedná se o perfektní nástroj do doby, kdy pracuje tak, jak má. Ve chvíli, kdy se začne chovat &#8222;tak nějak divně&#8220; se chyby hledají docela těžko.<br />
<span id="more-133"></span><br />
Co se vlastně stalo? Začalo to tím, že testy začaly vyhazovat následující výjimky:</p>
<pre lang="ini">
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'oracle.jdbc.driver.OracleDriver' for connect URL 'http://maven.apache.org'
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1150)
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
	at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:46)
	at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
</pre>
<p>To nejdivnější bylo to, že se aplikace snažila připojovat na URL: &#8218;http://maven.apache.org&#8216; místo toho, aby se připojovala na URL, která byla v konfiguraci. </p>
<p>Dalším pátráním jsem zjistil, že se v &#8222;targetu&#8220;, tedy místě, kam se ukládají zkompilované zdrojáky, vyskytuje soubor, definující springový kontext, a v něm se vyskytovalo následující (v property <strong>url</strong>):</p>
<pre lang="xml">
    <bean id="microsDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
       <property name="driverClassName" value="${jdbc.driverClassName}"/>
       <property name="url" value="http://maven.apache.org"/>
       <property name="username" value="${jdbc.username}"/>
       <property name="password" value="${jdbc.password}"/>
    </bean>
</pre>
<p>Jak se tam to mohlo dostat, když ve zdrojáku je něco úplně jiného:</p>
<pre lang="xml">
    <bean id="microsDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
       <property name="driverClassName" value="${jdbc.driverClassName}"/>
       <property name="url" value="${jdbc.url}"/>
       <property name="username" value="${jdbc.username}"/>
       <property name="password" value="${jdbc.password}"/>
    </bean>
</pre>
<p>Začali jsme tedy pátrat, jak se tam mohl tento řetězec dostat, a měla to na svědomí tahle konstelace:<br />
V POMu projektu byla definováno něco takového:</p>
<pre lang="xml">
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cz.csas.clf</groupId>
    <artifactId>clf-micros-product-configurator</artifactId>
    <packaging>war</packaging>
    <version>${version.micros}</version>
    <name>clf-micros-product-configurator</name>
    <url>http://maven.apache.org</url> 
       ...
    <build>
        <resources>
           ...
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
          ...
</pre>
<p>Co je na předchozím POMu zajímavých několik věcí. Je nastaveno filtrování resourců pro adresář, kde je uložen soubor s konfigurací a v projektu byl definován parametr url.</p>
<p>Díky chybě v mavenu došlo k nahrazení placeholderu ${jdbc.url} za property url, která navíc nebyla property <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
<p>Naštěstí pomohl upgrade na nejnovější verzi mevenu (2.2.1), kde se chyba už nevyskytla. Zvláštní je, že jsem v žádných release notes nebo něčem podobným nenašel o tomto problému žádnou zmínku.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jiri.kratochvil.eu/neprijemny-bug-v-mavenu/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">133</post-id>	</item>
		<item>
		<title>Maven 2 &#8211; Endorsed libs</title>
		<link>https://jiri.kratochvil.eu/maven-2-endorsed-libs/</link>
					<comments>https://jiri.kratochvil.eu/maven-2-endorsed-libs/#respond</comments>
		
		<dc:creator><![CDATA[Jiří Kratochvíl]]></dc:creator>
		<pubDate>Fri, 30 Oct 2009 19:38:41 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<guid isPermaLink="false">http://blog.kratochvil.eu/?p=3</guid>

					<description><![CDATA[Při použití Mavenu, kdy někdy je potřeba občas přidat nějakou tu knihovnu do endorsed adresáře JRE (například projekt Metro vyžaduje přetížit JAXWS a JAXB API), [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Při použití Mavenu, kdy někdy je potřeba občas přidat nějakou tu knihovnu do endorsed adresáře JRE (například projekt Metro vyžaduje přetížit JAXWS a JAXB API), je možné použít mechanismus, kdy se do JRE přihrají knihovny tak, jako by byly nakopírovány přímo do %JAVA_HOME%/lib/endorsed.<br />
<span id="more-468"></span><br />
Jenže mě se nechtělo cokoliv, co je závislé na aplikaci, nahrávat do libendorsed adresáře veřejné JRE. Jak tedy na to? Nejlépe tak, že si vytvoříte v adresáři s nainstalovaným Mavenem adresář endorsed a do něj nakopírovat soubor all.zip obsahující všechny class soubory, které jsem potřeboval „přetížit“. V mém případě (JAXWS API 2.1) to byly tyto JARy:</p>
<ul>
<li> jaxb-api-2.1.jar</li>
<li>jaxws-api-2.1-1.jar</li>
</ul>
<p>Poté je nutné modifikovat systémovou proměnnou MAVEN_OPTS takto:</p>
<pre lang="dos">set MAVEN_OPTS=-Xbootclasspath/p:%M2_HOME%endorsedall.zip</pre>
<p>Pozn. Já ještě musím zvednout paměť pro JRE, takže má osobní konfigurace vypadá takto:</p>
<pre lang="dos">set MAVEN_OPTS=-Xbootclasspath/p:%M2_HOME%endorsedall.zip -Xms64m -Xmx512m</pre>
<p>Pakliže máte srávně nainstalovaný Maven a korektně nastavenou proměnnou M2_HOME, nyní by JRE mělo brát obsah souboru all.zip v potaz a JAXWS API 2.1 začne fungovat. Podobně si můžete přibalovat další JARy – podle toho, jak bude potřeba.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jiri.kratochvil.eu/maven-2-endorsed-libs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">468</post-id>	</item>
	</channel>
</rss>
