Liny_@NotePad

沉迷ACG中

JSF开发中的几个问题笔记。。

  • jar包冲突
    服务器是JBoss4.2.2GA,部署的时候报错,看意思似乎是JAR包冲突,估计JBOSS自带了JSF的jar包,
    于是把应用程序lib目录下的jar包删掉,这次成功了。
    百度说该版本的default确实自带了,位置在deploy/jboss-web.deployer/jsf-libs下,可以直接删除或修改deploy/jboss-web.deployer/conf/web.xml文件来去除JBoss的自带JSF,详细在:http://blog.csdn.net/luofengjava/archive/2007/09/10/1779798.aspx
     
  • javax.servlet.ServletException: viewId:xxx - View xxx could not be restored.
    据说是session超时。。。这提示真不友好

继续学习……

JBoss 4.2.2GA:setProperty must be overridden by all subclasses of SOAPMessage

百度了下,原因是JBoss4不支持JDK 6,因为JDK6自带了SOAP,如果用5.0的即可,可我米有5.0……

http://community.jboss.org/wiki/JBossWithJDK6 这里提供了一个patch,我是解压版的 不会用 - _ -

http://www.jguru.com/forums/view.jsp?EID=1364629看到有说删除jboss-saaj.jar即可,但是似乎米有效果……

难道真的要装个5.0的JDK?百度之,得解(http://blog.csdn.net/evan_endian/archive/2008/10/31/3196273.aspx):
    把${JBOSS_HOME}/lib/中除了getopt.jar, jboss-system.jar, jboss-jmx.jar其他所有的jar拷贝进${JBOSS_HOME}/lib/endorsed,同时拷贝${JBOSS_HOME}/client/目录中的jboss-saaj.jar ,jboss-jaxrpc.jar到${JBOSS_HOME}/lib/endorsed目录下,这样服务器将使用jboss自带的老版本,经验证有效。

测试类跑成功了 满心欢喜^^

在Axis上部署WebService

上文提到了在Axis中用JWS即时编译、部署jws文件为WebService,虽然很简便但是十分不灵活,它不支持class,不支持jar,甚至不支持带包的文件,因此主要使用wsdd文件来定制部署。下面是一个例子:

 这是课本上的一个例子的wsdd文件,

  1. <deployment xmlns="http://xml.apache.org/axis/wsdd/"
  2. xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  3.      <service name="SearchOrder" provider="java:RPC">
  4.                 <parameter name="className" value="org.yoyo.service.SearchOrder" />
  5.                 <parameter name="allowedMethods" value="*" />
  6.         </service>
  7.                 <beanMapping qname="mySearch:Order" xmlns:mySearch="urn:BeanService" languageSpecificType="java:org.yoyo.bean.Order" />
  8.                 <beanMapping qname="mySearch:Customer" xmlns:mySearch="urn:BeanService" languageSpecificType="java:org.yoyo.bean.Customer" />
  9. </deployment>

执行时通过控制台运行命令java org.apache.axis.client.AdminClient deploy.wsdd 来部署服务,成功后打开http://localhost:8080/axis/servlet/AxisServlet会看到部署的服务。

参数意思写得很明显了,在此不再细表。

在Tomcat中部署Axis搭建SOAP环境

几个下载地址:

搭建步骤:

  1. 将Axis的压缩包解压后webapps目录下的axis目录拷贝到Tomcat的webapps目录下,
  2. 将xerces-j解压后得到的jar包放入Tomcat/webapps/axis/WEB-INF/lib目录下,
  3. 如果要支持JWS(临时发布,由Axis自动编译部署,即下文中用到的),要将jdk的tools.jar也拷贝进该目录。
  4. 同时配置环境变量,CLASSPATH中加上该目录下的所有jar包。
  5. 将JavaMail和JAF解压后的jar包拷到JDK的lib目录下和tomcat的lib目录下。
  6. 启动Tomcat,此时应可以看到axis的目录并能正常访问。
  7. 下面编写一个WebService程式HelloWorld.jws,并将之放入axis的目录下(会被axis自动编译部署):
    1. public class HelloWorld {
    2.  
    3.         public String sayHelloWorld(String name) {
    4.                 return name + ", Hello World!";
    5.         }
    6.        
    7. }
  8. 编写测试程式,在eclipse中创建一个项目,导入axis的lib目录下的所有jar包,新建TestClient类,代码如下:
    1. import java.net.MalformedURLException;
    2. import java.net.URL;
    3. import java.rmi.RemoteException;
    4.  
    5. import javax.xml.rpc.ServiceException;
    6.  
    7. import org.apache.axis.client.Call;
    8. import org.apache.axis.client.Service;
    9.  
    10. public class TestClient {
    11.  
    12.         public void doTest(String name) throws ServiceException, MalformedURLException, RemoteException {
    13.                 String url = "http://localhost:8080/axis/HelloWorld.jws";
    14.                 Service service = new Service();
    15.                 Call call = (Call) service.createCall();
    16.                 call.setTargetEndpointAddress(new URL(url));
    17.                 call.setOperationName("sayHelloWorld");
    18.                 String result = (String) call.invoke(new Object[] {name} );
    19.                 System.out.println(result);
    20.         }
    21.        
    22.         public static void main(String[] args) {
    23.                 try {
    24.                         new TestClient().doTest("YOYO");
    25.                 } catch (MalformedURLException e) {
    26.                         e.printStackTrace();
    27.                 } catch (RemoteException e) {
    28.                         e.printStackTrace();
    29.                 } catch (ServiceException e) {
    30.                         e.printStackTrace();
    31.                 }
    32.         }
    33.        
    34. }
  9. 运行该程式,若能得到正确的运行结果("YOYO, Hello World!")即说明成功搭建了一个SOAP环境。

Oracle客户端远程连接配置。。

首先打开Net Configuration Assistant,命名方法配置里选上:ORACLE NAMES、本地、主机名。

接着在本地NET服务名配置中添加,填入目标的host名、服务名与端口号,默认将采用scott/tiger进行连接。

(host名可以通过在控制台里tnsping主机IP获得)

测试成功后运行SQL*Plus,主机字符串填入配置在本地NET里的服务名,即可进行连接。

Windows+Eclipse+MinGW+Qt

(嵌入式考试的最后一题编程题居然是Qt GUI。。。囧。。)

几个下载地址:

(其实直接装Qt Creator更好用的说 囧。。)

JS响应回车事件。。

话说前次弄某销售界面,需要每次回车增加一个tr来录入新的数据,下面是响应回车的代码:

  1. function document.onkeydown()    //网页内按下回车触发
  2. {
  3.          if(event.keyCode==13)
  4.          {
  5.                // 调用add(i-1)号按钮点击事件(这是jQuery,不是默认js)
  6.                $("#add" + eval(i - 1)).click(); 
  7.                return false;                               
  8.          }
  9. }

真简单阿 = =

JBoss发布EJB用ANT

初次尝试ant。。果然方便 > <

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- 项目名与路径 -->
  3. <project name="HelloWorld" basedir=".">
  4.        
  5.         <!-- 定义一堆引用 -->
  6.        
  7.         <!-- basedir = 项目目录 -->
  8.         <property name="src.dir" value="${basedir}\src" />
  9.        
  10.         <!-- 环境变量 -->
  11.         <property environment="env" />
  12.        
  13.         <!-- 环境变量中的JBOSS_HOME -->
  14.         <property name="jboss.home" value="${env.JBOSS_HOME}" />
  15.        
  16.         <!-- 默认配置在default -->
  17.         <property name="jboss.server.config" value="default" />
  18.        
  19.         <!-- class文件存放位置 -->
  20.         <property name="build.dir" value="${basedir}\build" />
  21.        
  22.         <!-- 定义路径 -->
  23.         <path id="build.classpath">
  24.                 <fileset dir="${jboss.home}\client">
  25.                         <include name="*.jar" />
  26.                 </fileset>
  27.                 <pathelement location="${build.dir}" />
  28.         </path>
  29.        
  30.         <!-- 准备工作 -->
  31.         <target name="prepare">
  32.                 <!-- 删除目录 -->
  33.                 <delete dir="${build.dir}" />
  34.                
  35.                 <!-- 创建目录 -->
  36.                 <mkdir dir="${build.dir}" />
  37.         </target>
  38.        
  39.         <!-- 编译 -->
  40.         <target name="compile" depends="prepare" description="编译">
  41.                 <!-- 编译源码到指定目录 -->
  42.                 <javac srcdir="${src.dir}" destdir="${build.dir}">
  43.                         <classpath refid="build.classpath" />
  44.                 </javac>
  45.         </target>
  46.        
  47.         <!-- 打包 -->
  48.         <target name="ejbjar" depends="compile" description="创建EJB发布包">
  49.                 <!-- 定义打包内容 -->
  50.                 <jar jarfile="${basedir}\${ant.project.name}.jar">
  51.                         <fileset dir="${build.dir}">
  52.                                 <include name="**/*.class" />
  53.                         </fileset>
  54.                 </jar>
  55.         </target>
  56.        
  57.         <!-- 发布 -->
  58.         <target name="deploy" depends="ejbjar" description="发布EJB">
  59.                 <copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy" />
  60.         </target>
  61.        
  62.         <!-- 卸载EJB -->
  63.         <target name="undeploy" description="卸载EJB">
  64.                 <delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar" />
  65.         </target>
  66.        
  67. </project>

注释都比较清楚了 = = 。。似乎可以通用部署的 哈哈