我想知道Spring单例bean是否是线程安全的,如果是,那么为什么,如果不是那么为什么呢?
因为我是春天的初学者,所以请帮助.
什么时候应该使用preRenderView事件来初始化页面的数据而不是使用viewAction?它们在使用上是否相同,是否具有相同的效果?
preRenderView事件
<f:metadata>
<f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
要么
的viewAction
<f:metadata>
<f:viewAction action="#{myBean.initialize}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud) 在JBoss 7.1.1上的JavaEE6项目(EJB3,JSF2)中,似乎我们有@ViewScoped bean的内存泄漏.最后一天,我花时间在这个问题调查上.所以我创建了两个页面的简单项目,以保证在第一页离开@ViewScoped bean之后将被释放.
<context-param> //web.xml
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
<param-value>false</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
TreeBean.java
@ManagedBean
@ViewScoped
public class TreeBean implements Serializable {
private TreeNode root;
public static AtomicInteger count = new AtomicInteger(0);
@Override
protected void finalize() throws Throwable {
System.out.println("TreeBean beans count: " + count.decrementAndGet() + " (FINALISATION)");
}
public TreeBean() {
super();
System.out.println("TreeBean beans count: " + count.incrementAndGet() + " (INITIALISATION)");
}
Run Code Online (Sandbox Code Playgroud)
first.xhtml
....
<h:form id="frm">
<p:tree
value="#{treeBean.root}"
var="node"
id="tree">
....
<p:commandLink
action="second.xhtml?faces-redirect=true"
value="toSecond" />
....
Run Code Online (Sandbox Code Playgroud)
second.xhtml
....
<h:form …Run Code Online (Sandbox Code Playgroud) 在我的项目中,我有以下项目结构:
我有一个生成war文件的模块,可以部署在Tomcat应用程序服务器中.该模块依赖于Axis2库:
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2</artifactId>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-http</artifactId>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-webapp</artifactId>
<type>war</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)
此类包含WEB-INF下conf文件夹中的axis2.xml文件.
现在这个模块依赖于一个单元模块,它具有jar的包类型.
现在在我的web模块中,在我的存根的代码中,我有以下代码:
.GazelleObjectValidator.getInstance()validateObject();
XcpdValidationService是jar模块(依赖项)中的一个类,此方法通过SSL调用外部Web服务并使用代理.
此Web服务客户端由JAX WS RI生成
但是这个类不使用父模块中的axis2.xml配置并使用它自己的轴配置,这是默认设置,我的代理没有配置...
@WebEndpoint(name = "GazelleObjectValidatorPort")
public GazelleObjectValidator getGazelleObjectValidatorPort() {
return super.getPort(new QName("http://ws.validator.sch.gazelle.ihe.net/", "GazelleObjectValidatorPort"), GazelleObjectValidator.class);
}
Run Code Online (Sandbox Code Playgroud)
该方法本身如下所示:
@WebMethod
@WebResult(name = "validationResult", targetNamespace = "")
@RequestWrapper(localName = "validateObject", targetNamespace = "http://ws.validator.sch.gazelle.ihe.net/", className = "net.ihe.gazelle.schematron.ValidateObject")
@ResponseWrapper(localName = "validateObjectResponse", targetNamespace = "http://ws.validator.sch.gazelle.ihe.net/", className = "net.ihe.gazelle.schematron.ValidateObjectResponse")
public String validateObject(
@WebParam(name = "base64ObjectToValidate", targetNamespace = "")
String base64ObjectToValidate,
@WebParam(name = "xmlReferencedStandard", targetNamespace = "") …Run Code Online (Sandbox Code Playgroud) 我们有一个消息处理服务器,它
现在,客户端希望在服务器上拥有Web服务服务器,他们将能够使用Web服务客户端查询消息处理服务器.例如,给我今天的所有消息,或删除带有id的消息....
问题是:
鉴于新的Java8,我们为异步任务获得了非常好的功能,例如CompletableFuture和.paralellStream().如果你在Java SE中运行它,因为我已经理解它你将使用ForkJoinPool,但是如果我在例如Wildfly或TomcatEE中运行以下示例会发生什么?
//Here I start a comp.Future without giving an Executor
test = CompletableFuture.supplyAsync(() -> timeConsumingMethod());
//Here I start a parallel stream
mList.paralell().filter(...).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
会发生什么,我将从哪里借用我的资源
我有一个自定义SOAP消息处理程序,用于传入消息,根据正在调用的操作运行不同的代码.我第一次尝试获取操作名称看起来像这样:
public boolean handleMessage(SOAPMessageContext context)
{
String op = context.get(MessageContext.WSDL_OPERATION);
...
Run Code Online (Sandbox Code Playgroud)
此操作失败,因为该属性MessageContext.WSDL_OPERATION似乎永远不会被设置.然后我尝试使用这个:
public boolean handleMessage(SOAPMessageContext context)
{
Map<?, ?> headers = (Map<?, ?>)context.get(MessageContext.HTTP_REQUEST_HEADERS);
ArrayList<String> SOAPAction = ((ArrayList<String>) headers.get("SOAPAction"));
String opName = SOAPAction.get(0);
//opName will be formatted like "urn#myOperation", so the prefix must be removed
opName = ((opName.replace("\"","").split("#"))[1]);
Run Code Online (Sandbox Code Playgroud)
这有效,但我担心可能会出现标题属性"SOAPAction"未设置(或甚至不存在)的情况,或者没有我期望的值.我也有点担心,因为我不知道这是否是获取操作名称的"官方"方式 - 我通过查看context调试器中的内容来弄清楚它.
在处理传入的SOAP消息时,有没有更好的方法来获取操作名称?
您好我使用Netbeans 8.0.2和Oracle 11g Express Edition在JSF 2.2中编写了一个库管理系统.我有几个名为Books,Borrowers等的页面和一些在数据库中命名相同的表.我的问题是:在Borrowers中显示屏幕书ID.但是我想要达到具有相同身份的书籍.这是我的代码.
public List<Borrower> getBorrowers()throws ClassNotFoundException,SQLException, InstantiationException, IllegalAccessException{
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","Alparslan-PC","123456");
ps=con.prepareStatement("SELECT * FROM BORROWER");
BookidPs = con.prepareStatement("SELECT TITLE FROM BOOK AND BORROWER WHERE ISBN=?");
ResultSet rs=ps.executeQuery();
ResultSet Rs2=BookidPs.executeQuery();
List<Borrower> liste = new ArrayList<Borrower>();
while(rs.next()){
Borrower borrow = new Borrower();
borrow.setId(rs.getBigDecimal("ID"));
borrow.setName(rs.getString("NAME"));
borrow.setSurname(rs.getString("SURNAME"));
borrow.setAddress(rs.getString("ADDRESS"));
borrow.setPhonenumber(rs.getString("PHONENUMBER"));
borrow.setBorrowdate(rs.getString("BORROWDATE"));
//book.setIsbn(rs.getString("BOOKID"))
borrow.setBookid(Rs2.getString("BOOKID"));
//borrow.setBookid(((Book) rs.getObject("BOOKID")).getIsbn());
liste.add(borrow);
}
System.out.print(liste);
return liste;
}
Run Code Online (Sandbox Code Playgroud)
如果第22行用borrow.setBookid(rs.getString("BOOKID"))更改; 显示了bookids.我写了另一个名为BookidPs的查询.如果我运行这个程序,我会在index :: 1错误时得到Missing IN或OUT参数.如果你帮助我会好意思.谢谢
我正在开发一个Java Web服务.此时我可以获得Http头请求.但我想添加更多标头请求.
我目前正在servlet过滤器中这样做.
@WebFilter(urlPatterns = {"/*"})
public class AddHeader implements Filter {
@Resource
private WebServiceContext context;
public AddHeader() {
}
@Override
public void init(FilterConfig fConfig) throws ServletException {
}
@Override
public void destroy() {
}
@Override
public void doFilter(
ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (request.getContentLength() != -1 && context != null) {
MessageContext mc = context.getMessageContext();
((HttpServletResponse) response).addHeader(
"Operation", "something"
);
}
chain.doFilter(request, response);
}
}
Run Code Online (Sandbox Code Playgroud)
此策略的问题是添加的标头是静态的.
使用SoapHandler类,我可以获得SOAP消息 - 动态:
public class SoapClass implements …Run Code Online (Sandbox Code Playgroud) 我正在使用primefaces v3.5.在数据表中我在一列上使用过滤器.如何在加载页面时为过滤器设置默认值.
java ×5
jax-ws ×4
java-ee ×3
jsf-2 ×3
soap ×2
web-services ×2
asynchronous ×1
axis2 ×1
java-ee-7 ×1
jsf ×1
jsf-2.2 ×1
oracle ×1
oracle11g ×1
primefaces ×1
servlets ×1
soaphandler ×1
spring ×1
spring-mvc ×1
sql ×1
ssl ×1
tomcat ×1
view-scope ×1