0

简介我正在使用 JAX-WS 编写 Web 服务,并将其部署在 Tomcat 中。经历了很多困难,我终于写了一些代码。

问题不幸的是,当尝试运行它时,我收到以下错误:

Context is read only

设置我正在编写一个查询多个数据库并返回单个结果的 Web 服务。为此,在init()方法(标有@PostConstruct)中,我创建了一系列DataSources添加到上下文中的内容。

这就是我创建池的方式(基于 Tomcat 文档),创建后我将其添加到上下文中(基于本教程):

@PostConstruct
private void init(){
  PoolProperties props = new PoolProperties();
  props.setUrl("jdbc:postgresql://" + ...);
  props.setUsername(...);
  props.setPassword(...);
  props.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;" +
    "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");

  DataSource dataSource = new DataSource();
  dataSource.setPoolProperties(propos);

  Context ctx = new InitialContext(env);
  ctx.bind("java:/comp/env/dbpool", dataSource);
}

后来我使用它:

@WebMethod
public Result performQuery(QueryParameters params){
  Context ctx = new InitialContext(env);
  (DataSource) source = (DataSource) ctx.lookup("java:/comp/env/dbpool");
}

我将 Web 服务部署在 Tomcat 7 服务器上。

谷歌搜索后我明白我无法在 Tomcat 上写入上下文的问题但我还能如何解决这个问题?根据我对 JAX-WS 的了解,我不能只拥有一个持有 a 的私有变量DataSource,对吗?我必须DataSource使用 a通过Context,对吗?

4

1 回答 1

1

InitialContext只能从 Tomcat 代码写入,不能从您的客户端代码写入。您必须将您的添加DataSource到您的中context.xml,它会起作用。

于 2013-06-10T09:01:01.660 回答