我已经创建了简单的jax-ws(anotated Java 6 class to web service)服务,并在glassfish v3上展示了它。 web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
<servlet>
<servlet-name>MyServiceName</servlet-name>
<description>Blablabla</description>
<servlet-class>com.foo-bar.somepackage.TheService</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyServiceName</servlet-name>
<url-pattern>/MyServiceName</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</web-app>
战争中没有sun-jaxws.xml。 该服务工作正常,但我有2个问题: 我正在使用apache通用配置包来读取我的配置,所以我有init函数调用配置的东西。 1.如何为jaxws服务配置init方法(例如我可以为servlet执行) 2. load on startup参数不影响服务,我看到每次请求init函数再次调用(和c-tor)。如何设置我的服务范围?
非常感谢,
答案 0 :(得分:2)
如何为jaxws服务配置init方法(例如我可以为servlet执行)
Web和EJB的JAX-WS端点可以具有可选的生命周期方法,如果存在则自动调用这些方法。任何方法都可以用作具有正确注释的生命周期方法:
@PostConstruct
- 在实施类开始响应Web服务客户端之前由容器调用。
@PreDestroy
- 在端点从操作中删除之前由容器调用
使用init()
注释您的@PostConstruct
方法应该可以解决问题。
load on startup参数不影响服务,我看到每次请求init函数再次调用
首先尝试使用建议的注释。如果您仍然面临意外行为,请发布您的代码。
答案 1 :(得分:0)
感谢快速回答,Pascal。
BTW,我热烈建议使用“有效”的servlet 2.5或servlet 3.0 web.xml(使用web-app元素和xsd声明中的version属性)。
我正在使用2.5版本,我只是没有将此部分粘贴到我的帖子中
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:j2ee="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<description>WebTier for the Login Manager Service</description>
<display-name>LoginManagerWAR</display-name>
<servlet>
<description>Endpoint for Login Manager Web Service</description>
<display-name>LoginManagerControllerService</display-name>
<servlet-name>LoginManagerController</servlet-name>
<servlet-class>loginmanager.controller.LoginManagerController</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>LoginManagerController</servlet-name>
<url-pattern>/LoginManagerControllerService</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>54</session-timeout>
</session-config>
PostConstruct工作正常,谢谢,但仍然没有发生加载启动。
@WebService(
name="LoginManagerController",
serviceName="LoginManagerControllerService"
)
public class LoginManagerController {
private ILoginManager manager;
@Resource
private WebServiceContext wsContext;
@PostConstruct
private void init(){
.....
}
此外,现在每个客户端请求都会对webservice进行2次init()调用: 就像我在电锯中看到的那样,首先调用服务的init(),然后再次调用,然后调用实际客户端的函数(我打印webservice类实例的哈希码,两个调用的实例相同!!!):
<强>&GT;消息内部init()方法... controller = 31641446
<强>&GT;消息登录管理器= 11229828
<强>&GT; .....元素的初始化...... blablabla .....
<强>&GT;消息退出init()方法
<强>&GT;消息内部init()方法... controller = 31641446
<强>&GT;消息登录管理器= 32361523
控制器是在控制器的init()内创建的服务和管理器(从第一次调用到第二次调用的哈希码)。
我不明白出了什么问题......
<强>更新强> 这似乎是一个与glassfish v3相关的问题(也许是我的env设置或glassfish配置)。我在Sailfin和Glassfish V2上尝试过这场战争,它完美地运作......