2010-03-30 23 views
2

我已经创建了简单的jax-ws(Java Web服务中的Java 6类),并在glassfish v3上进行了部署。 web.xmljax-ws on glassfish3初始化方法

<?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服务的初始化方法(例如我可以为servlet做的例子) 2.启动时加载参数不影响服务,我发现对于每个请求init函数再次调用(和c - 叔)。我怎样才能为我的服务设置范围?

非常感谢,

+0

顺便说一句,我热烈地建议使用“有效的”servlet 2.5或servlet 3.0 web.xml(在web-应用程序元素和xsd声明)。 – 2010-03-30 13:07:45

回答

1

我如何配置JAXWS服务init方法

JAX-WS端点,网络和EJB(像我可以对servlet的比如做),可以有可选的生命周期方法,如果存在的话,这些方法会自动调用。任何方法可以作为与正确的注释的生命周期方法:

  • @PostConstruct - 实现类开始响应Web服务客户端容器调用之前。

  • @PreDestroy - 由端点之前容器调用从操作

因此,与@PostConstruct注释您init()方法应该做的伎俩删除。

在启动参数负载不影响服务,我看到,为每个请求初始化函数调用再次

首先尝试使用建议的注解。如果您仍然面临意外的行为,请发布您的代码。

0

感谢您的快速回答,帕斯卡。

顺便说一句,我热烈地建议使用“有效”的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(){ 
    ..... 
    } 

更多了,现在每个客户机请求使得2的init()的web服务的调用: 就像我可以在电锯看到,第一个叫的init()的服务,那么它再次打电话,然后实际上客户功能(I打印web服务类实例的哈希码和它的用于呼叫相同的实例!!!):

>消息内init()方法...控制器= 31641446

>消息登录管理器= 11229828

> .....元件的初始化.... blablabla .....

>消息退出init()方法

>消息内的init()方法...控制器= 31641446

>信息登录管理= 32361523

控制器是在控制器的init()内部创建的服务和管理器(至少有一个哈希码从第一个调用改为第二个)。

我不明白什么是错....

UPDATE 这似乎是一个以GlassFish的第三版相关的问题(也许我的ENV设置或GlassFish的配置)。我试图在Sailfin和Glassfish V2上展开这场战争,它的完美工作......

+0

如果您认为v3中存在错误,请通过提交问题填写该问题@ https://glassfish.dev.java.net/servlets/ProjectIssues – vkraemer 2010-04-03 15:24:32