maven里如何根据不同的environment打包
Feb 17

从一个main方法启动内嵌的Jetty很简单。Jetty的文档上有详细的例子。
http://docs.codehaus.org/display/JETTY/Embedding+Jetty

现在的一个项目需要用到JNDI.把datasource和上传文件的目录保存到了jndi中这样统一了不同os和开发者间的差异。只要在大家配置同样的jndi name就不用考虑打包的问题。这是另外一种解决办法。

首先你需要再添加两个jar包。jetty-plus和jetty-naming包。少了jetty-naming报的不是no class found exception.所以一定不要忘记。直接看代码吧。其实也很简单。

public class JettyLauncher {

    private static final int HTTPPORT = 8080;
    private static Server server;
    private static final String CONTEXT = "/web";

    public static void main(String[] args) throws Exception {
        server = new Server();
        SocketConnector socketConnector = new SocketConnector();
        socketConnector.setPort(HTTPPORT);
        server.setConnectors(new Connector[] { socketConnector });
        WebAppContext context = new WebAppContext("WebRoot", CONTEXT);
        context.setConfigurationClasses(new String[]{"org.mortbay.jetty.webapp.WebInfConfiguration",
                "org.mortbay.jetty.plus.webapp.EnvConfiguration",
                "org.mortbay.jetty.plus.webapp.Configuration",
                "org.mortbay.jetty.webapp.JettyWebXmlConfiguration",
                "org.mortbay.jetty.webapp.TagLibConfiguration"});
        new EnvEntry(context, "filesystem/root", "/var/store", true);
        ComboPooledDataSource pooledDataSource = new ComboPooledDataSource();
        pooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
        pooledDataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/web?useUnicode=true&characterEncoding=utf8");
        pooledDataSource.setUser("root");
        pooledDataSource.setPassword("root");
        new Resource(context, "jdbc/db", pooledDataSource);
        server.addHandler(context);
        server.setStopAtShutdown(true);
        server.setSendServerVersion(true);
        server.start();
    }
}

这里你会发现jdbc/db还是找不到。而filesystem/root 这个能找到了。害得我找了好长时间。原来还需要在web.xml里添加一个<resource-ref>.

    <resource-ref>
        <description>DataSource Reference</description>
        <res-ref-name>jdbc/51user</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

参考

  1. http://docs.codehaus.org/display/JETTY/JNDI
  2. http://docs.codehaus.org/display/JETTY/DataSource+Examples


Like others

12 Responses to “Embedding Jetty with JNDI support how to”

  1. Seven Says:

    问下博主的空间是哪的???

  2. 莫多(somebody) Says:

    现在是放到一个朋友的服务器上的。

  3. Jiuzhe Says:

    问下 myblog 有jdk 1.4的版本吗

  4. 莫多(somebody) Says:

    to:jiuzhe
    没有jdk1.4版本了。不过你可以用这个转成jdk1.4的字节码就可以使用了。

    http://www.blogjava.net/calvin/archive/2006/04/27/43443.html

  5. Fred Chu Says:

    哈哈不错,我的BLOG地址换了。http://fredchu.users.sourceforge.net/weblog/

  6. blind Says:

    很想认识你,我也想写一个blog系统,但又很有问题解决不了,我是个 java初学者,希望能与你交流。 我的 qq 是:gfz@w.cn  搜这个邮箱就行了,或者 发邮件也可以,期待你的消息。

  7. jack Says:

    文章写的不错,博主好像不更新了。 
    www.test21.cn

  8. qliu Says:

    网站设计的不错,不过不能注册。。。

  9. 子猴 Says:

    不错,特别是能够支持wordpress主题,你这个博客系统支持多人博客吗?类似于搜狐那种的?

  10. 莫多(somebody) Says:

    你好。现在的版本还不支持。多谢关注。

  11. ddd Says:

    多谢~

  12. 申达股份 Says:

    现在才上的

Leave a Reply

Identifying Code