简介我正在使用 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
,对吗?