0

より具体的には、すべての依存関係を含む実行可能な war を取得しました。アプリケーションは、jndi データソースを使用して実行するチャームのように、jndi データソースなしで起動しますが、失敗しました。このような構成には jetty.xml の場所がないと信じているため、jetty はデフォルトでそれを読み取らないため、jetty-env.xml も使用できません。jndi データソース構成に jetty-web.xml を使用しようとしましたが、jetty はアプリケーションのデプロイに失敗し、503 エラー コードを返します。Jetty9-M4 を使用しています。Tomcat プーリングと BoneCP の両方を試みましたが、結果は同じでした。

スタータークラス:

import java.net.URL;
import java.security.ProtectionDomain;
import org.eclipse.jetty.server.*;
import org.eclipse.jetty.webapp.WebAppContext;


public final class Loader {

    public static void main(String[] args) throws Exception
    {
         String jetty_home = "..";
         int appli_port = 8080;
         Server server = new Server(appli_port);
         ProtectionDomain protectionDomain = Loader.class.getProtectionDomain();
         URL location = protectionDomain.getCodeSource().getLocation();
         WebAppContext webapp = new WebAppContext();
         webapp.setContextPath("/");
         webapp.setWar(location.toExternalForm());    
         server.setHandler(webapp);

         server.start();
         server.join();
    }
}

jetty-web.xml:

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <New id="testDS" class="org.eclipse.jetty.plus.jndi.Resource">
        <Arg></Arg>
        <Arg>jdbc/testDS</Arg>
        <Arg>
            <New class="com.jolbox.bonecp.BoneCPDataSource">
                <Set name="driverClass">org.postgresql.Driver</Set>
                <Set name="jdbcUrl">jdbc:postgresql://localhost:5432/testDS</Set>
                <Set name="username">name</Set>
                <Set name="password">password</Set>
                <Set name="minConnectionsPerPartition">5</Set>
                <Set name="maxConnectionsPerPartition">50</Set>
                <Set name="acquireIncrement">5</Set>
                <Set name="idleConnectionTestPeriod">30</Set>
            </New>
        </Arg>
    </New>
</Configure>

jetty-web フェーズの jndi が遅すぎるか、構成が間違っていると思われます。

下手な英語でごめんなさい。


Hibernate を ORM として使用していることを忘れていました。

web.xml には以下が含まれます。

<resource-ref>
    <description>Postgres datasource</description>
    <res-ref-name>jdbc/testDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

Hibernate.cfg.xml には次のものが含まれます

<property name="hibernate.connection.datasource">java:comp/env/jdbc/testDS</property>

試みた

<property name="hibernate.connection.datasource">jdbc/testDS</property>

どちらも機能していません。


jetty-web.xml戦争に配置された小さな補足事項として、WEB-INFJNDIリソース構成には問題がなく、デフォルトで使用されます。

4

1 に答える 1

0

jetty-env.xmlファイルは WEB-INF/jetty-env.xml から自動的に取得する必要があります。こちらを参照してください: http://www.eclipse.org/jetty/documentation/current/jetty-env-xml.html。ではなく、 を使用することをお勧めjetty-env.xmljetty-web.xmlます。

また、アプリケーション内から JNDI ルックアップを実行する方法も示してもらえますか? JNDI データソースは正しく初期化されていますが、JNDI 名が正しくない可能性がありますか?

ここにいくつかの桟橋 JNDI の例があります: http://www.eclipse.org/jetty/documentation/current/jndi-datasource-examples.html

更新: 組み込みの実行時に Jetty が自動的に取得しないようです。これを試して:

public static void main(String[] args) throws Exception
{
    String jetty_home = "..";
    int appli_port = 8080;
    Server server = new Server(appli_port);
    ProtectionDomain protectionDomain = Loader.class.getProtectionDomain();
    URL location = protectionDomain.getCodeSource().getLocation();
    WebAppContext webapp = new WebAppContext();
    webapp.setContextPath("/");
    webapp.setWar(location.toExternalForm());

    // setup JNDI
    EnvConfiguration envConfiguration = new EnvConfiguration();
    URL url = new File("path to jetty-env.xml").toURI().toURL();
    envConfiguration.setJettyEnvXml(url);
    webapp.setConfigurations(new Configuration[] {new WebInfConfiguration(), envConfiguration, new WebXmlConfiguration()});

    server.setHandler(webapp); 
    server.start();
    server.join();
}

( http://blog.armhold.com/2011/12/27/how-to-get-jndi-working-with-wicket-1-5-and-jetty-7-5/を参照)

于 2013-01-24T12:27:22.743 に答える