Tuscany Home
 

FAQ

From Tuscany中文社区

Jump to: navigation, search

目录

[编辑] 编译与开发中的问题

[编辑] 我需要哪个版本的 Java?

IBM 和 Sun 的 JDK 1.5 都可以支持Tuscany,并且也是社区一般情况下使用的。
不能使用JDK1.4,因为Tuscany SCA的很多代码使用了JDK1.5的新特性,如泛型和注释。
JDK1.6 在XML流处理方面还存在一些问题,有些时候会带来一些问题。我们面前也在跟踪这类问题。
如果你遇到以下的错误,则表明它来自JDK1.6。
  • javax.xml.stream.FactoryConfigurationError: Provider
  • javax.xml.stream.XMLInputFactory could not be instantiated:
  • java.lang.InstantiationException at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:158)

[编辑] 我需要哪个版本的 Maven?

为了编译 Apache Tuscany 代码。你需要安装Maven。目前,代码库可以与Maven 2.0.5正常工作。有人也曾使用更高版本成功编译,但是如果你遇到问题,则请尝试使用2.0.5。

[编辑] 为什么我下载的 Tuscany 代码无法编译?

如果你从Tuscany的SVN代码库检出了最新的代码。那你可能有些不幸,因为当时的代码可能正处于排错状态。由于trunk代码是各方开发者都在共同合作开发的地方。所以这类情况会时常发生,但是开发者们同时也会努力尽快排除问题。

另一些问题也会导致无法编译。一个很有价值的信息源就是邮件列表。我们可能会给出以下建议:

停止你正在使用的某种IDE 检出最新的修订版

cd mytuscanydir
svn checkout https://svn.apache.org/repos/asf/incubator/tuscany/java/

或者(如果你已经有了某个版本的代码)

svn update https://svn.apache.org/repos/asf/incubator/tuscany/java/

清空所有的maven项目

cd mytuscanydir/sca
mvn clean

删除或重命名maven本地类库目录,以清除maven的本地类库中清除所有的SCA的文件。

.m2\repository\org\apache\tuscany\sca

重新编译sca

cd mytuscanydir/sca
mvn

如果仍然不能编译。那就请您到邮件列表上发一封邮件吧。


[编辑] 编译过程出现Java Heap 错误?

在运行到itest的时候,我总是看到一个"Java heap space"错误,但是如果在itest目录下编译,则可以通过,而在定级目录则不行。

试试"MAVEN_OPTS="-Xmx1024m -Xms512m",或者你可以在sca的pom文件中提高surfire plugin部分的内存配给1

1+ https://svn.apache.org/repos/asf/incubator/tuscany/java/sca/pom.xml


[编辑] 如何从下载的代码生成 Eclipse 项目 ?

如果你解压了下载的源码包,或者检出了svn库,你会看到如下的目录结构:

demos
distribution
itest
modules
samples
tools
pom.xml

你可以用maven编译代码

mvn

你还可以用以下命令从每个模块编译Eclipse项目

mvn -Peclipse eclipse:eclipse

这将为每个模块生成".classpath" 和 ".project" 文件。最简单的方法就是用Eclipse输入这些项目。在Eclipse里面,使用"File/Import/Existing Projects Into Workspace"。在向导里面,选择你的代码目录,Eclipse将会发现各个生成的项目。

如果你输入所有的模块。你会发现工作区内的各个项目间的依赖关系已经设定好了。这样为你在调试和跟踪代码时,带来了很多便利。


[编辑] 如何从下载的WebApp示例代码生成 Eclipse WTP 项目?

如果你正在使用Eclipse WTP,并且想从WebApp例子中得到一个WTP Web项目。你只要在mvn eclipse:eclipse 命令后面多给一个参数 -Dwtpversion=1.5

mvn -Dwtpversion=1.5 -Peclipse eclipse:eclipse

神奇 -Dwtpversion=1.5 参数将会为每个Eclipse项目增加 WTP Web项目属性。如 <packaging>war</packaging> 。接下来,你便可以将这些项目增加到WTP Tomcat 或 Geronimo Server 配置中, 直接在Eclipse工作区中运行这些项目代码。


[编辑] 使用IBM JDK I运行WSConfidentialityTestCase 时,出现java.lang.ExceptionInInitializerError arising from the base java.security.InvalidKeyException: Public key presented not for certificate signature - 如何克服这种现象?

解决这个问题,请到IBM JDK的 jre\lib\security\java.security文件中增加安全设定:如下

#
# List of providers and their preference orders:
#
security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider
security.provider.3=com.ibm.jsse2.IBMJSSEProvider2
security.provider.2=com.ibm.crypto.provider.IBMJCE
security.provider.4=com.ibm.security.jgss.IBMJGSSProvider
security.provider.5=com.ibm.security.cert.IBMCertPath
security.provider.6=com.ibm.security.sasl.IBMSASL


[编辑] maven依赖的类库没有公布之前,如何运行RC版本中的示例程序?

二进制版里面的例子在我们在maven在线类库中发布其依赖资源之前,是无法编译的。为了完成测试,你可以暂时在maven settings.xml中增加一个镜像设置做法如下:

<mirrors>
   <mirror>
     <id>ant.staging</id>
     <url>http://people.apache.org/~antelder/tuscany/1.0-RC1a/maven</url>
     <mirrorOf>apache.incubator</mirrorOf>
     </mirror>
</mirrors>

settings.xml位于你的home目录中的.m2子目录下,比如,我的就是在 : "C:\Documents and Settings\Administrator\.m2". 如果你没有找到,我们这里有一个例子: settings.xml


[编辑] 如何打开更多的运行时输出?

Tuscany使用JDK logger 输出info, warning 等. 输出多少内容由logging.properties文件控制. Tuscany代码中没有提供这个文件,因为它使用JDK设定缺省的INFO级别的输出。如果你想设置这个级别,则请创建一个logging.properties文件,或者修改当前的jre/lib下面的那个。如,在IBM JDK中:

C:\thedirwhereiinstalledjava\jre\lib\logging properties

你想将输出级别设置为FINE,以得到更多参考信息,则请

.level= FINE

或者在屏幕上获得更多输出

java.util.logging.ConsoleHandler.level = INFO参考这里 有有关JDK日至的设定的文档。


[编辑] 如何使用Eclipse远程调试 Tuscany Java SCA 应用?

这里有很多有关如何开启java远程调试的文档:这里有一个

简单讲:就是让JVM在一个端口上输出调试信息。例如:调试Calculator例子的时候

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
 -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-calculator.jar;.calculator.CalculatorClient
Listenin for transport dt_socket at address: 8000
3 + 2=5.0
3 - 2=1.0
3 * 2=6.0
3 / 2=1.5

重要的一点是参数中的-X. 注意地址设在端口8000. 在 Eclipse 中,你需要简单地打开调试对话框(debug dialog)并创建一个新的"Remote Java Application",并设定端口8000。以配合上面的命令。

假设你已经在Eclipse中开始使用 Tuscany SCA 源码,你就可以开始调试calculator例子了。


[编辑] 为什么Maven在变异过程中上锁?

简言之,我们也不知道。但是我们有时也在windows上遇到这种问题,并且曾经回溯到与其他应用程序之间的冲突。所以首要的措施就是停止计算机上的其他应用程序,然后再尝试一下,看看是否能够通过。

[编辑] Java 实现问题

[编辑] 如何用 @Service 注释标记多个接口?

@Service(interfaces={Interface1.class, Interface2.class, Interface3.class} )
public class ServiceImpl implements Interface1, Interface2, Interface3{
 ...
}

[编辑] 为什么引用(references)没有被注入到我的构件中?

如果你已经象这样实现了一个构件...

public class ServiceImpl implements ServiceInterface1{
 @Reference
 ServiceInterface2 serviceReference1;

 @Reference
 private ServiceInterface2 serviceReference2;

 @Reference
 protected ServiceInterface2 serviceReference3;

 @Reference
 public ServiceInterface2 serviceReference4;

 ...
}

则你会在运行时发现serviceReference1 和 serviceReference2 都是 null,这是因为 SCA 只能“注入” protected 或 public 类型的成员。这对于其他“注入”型注释也是一样的。如@Callback, @ConversationId 和 @Context.

[编辑] 绑定的问题

[编辑] SCA 构件能否被发布为一个无状态EJB?

不幸的是,我们目前只支持从SCA调用SLSB,我们欢迎任何这方面的贡献。Image:Smile.gif

[编辑] 数据绑定问题

[编辑] 逻辑类型与物理类型之间的区别?

逻辑类型是指那些在链接服务时所传递的数据类型。这可以是Java 类型, XML 类型, 以及CORBA 类型, 它们是在服务组装过程中使用的服务接口。而物理类型指的是运行时的实际类型。在Java环境中,它们一定是一个Java对象,有时它们会是与逻辑类型相同的类型。如一个Java构件通过Java接口本地调用另一个Java构件的时候,其逻辑类型和物理类型就是相同的。很多情况下,他们是不同的,例如,服务接口是WSDL,则逻辑类型则是WSDL所定义的XML类型。运行时相同的逻辑类型,有着很多不同的物理类型。例如, 同一个XML文档可能表现为DOM, StAX 流,SDO, 或 JAXB 对象,也可能是一个AXIOM流。Tuscany支持各种物理类型之间的转换。

数据中介拦截(data mediator interceptor)是做什么用的? 你能说一说当具有引用R的构件A在使用具有服务S的构件B的时候,中介是如何工作的?

拦截器是由联结对象添加的。 A的外联于B的内联描述了他们所支持的数据类型。当联结建立的时候,如果需要类型转换,则会增加拦截器。

传输绑定的一项任务就是:转换一个内存中的二进制地址,并用于网络(序列化和反序列化)。我们重用了一些成功的传输方案如 Axis2 或 RMI. 这样,我们就需要在内部联结的时候转换物理类型。例如Axis2只接受AXIOM,所以在引用的时候我们需要转换用户的一个 AXIOM 的物理类型,而在服务端,我们需要将传输过来的AXIOM转换为用户实现所需要的类型,该过程描述如下:

  • A 通过物理Java 对象 X(java)引用 R
  • X 被放入 R的外联
  • 数据中介将 X(java) 转换为 AXIOM 对象 X(axiom)
  • X(axiom) 被放入Axis2绑定的内联
  • Axis2绑定将 X(axiom)序列化(XML格式)到网络上
  • 目标Axis2绑定将来自网络的 XML 反序列化为 X(axiom)
  • X(axiom) 被放入Axis2绑定的外联
  • 数据中介按照目标构件的需要将 X(axiom) 转换为 X(java)
  • X(java) 被放入 B的内联
  • B的目标实例被调用时,得到传入的 X(java)

一个重要的事情: 从结构上看我们将要处理两个物理联结: 客户端(源构件A)联结到Axis2外联传输,服务端则联接Axis2内联传输到目标构件B。

从全局角度考虑,只有一个逻辑联结从 A 到 B,但是由于A 和 B 可能位于两个运行时,所以逻辑联结被分解为两个物理联结。 A->net 和 net->B.

[编辑] Contribution问题

[编辑] META-INF/sca-contribution.xml是干什么用的?

SCA 组装模型标准 1.00 版 在第1.10.2.3.节描述了这个文件,sca-contribution.xml中所描述的任何组件,都会被自动纳入到可发布资源列表

如果你在目录中有一个contribution

/my/contribution/dir

则所有的组件与该目录下的其他资源都将被列入contribution服务. 例如, 如果我们有

/my/contribution/dir/META-INF/sca-contribution.xml /my/contribution/dir/mycomposite.composite

sca-contribution.xml内容:

<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="http://mycomposite" xmlns:management="http://mycomposite"> <deployable composite="mycomposite:MyComposite"/> </contribution>

则contribution服务会寻找mycomposite.composite 和他所包含的一个叫做 mycomposite:MyComposite的组件, 然后发布他们。



[编辑] META-INF/sca-deployables/ 是干什么用的?

这是一个Tuscany自定的发布构件的方式, SCA标准并未提出这个做法。

如果你在某个目录有一个contribution

/my/contribution/dir

则所该目录下的有组件、构件都将列入发布服务。/META-INF/sca-deployables/ 将被自动发布。例如

/my/contribution/dir/META-INF/sca-deployables/mycomposite.composite

[编辑] 标准中的问题

[编辑] Tuscany 所实现的标准在哪里?

SCA 技术委员会共有6个:

会议时间,文档,以及事件都在这几个链接里面。

邮件列表如下:

[编辑] 策略(Policy)方面的问题

[编辑] Tuscany 1.0版本支持哪个级别的策略 ?


Java SCA 1.0版本, 一个SCA 域的策略意图和策略组可以在 definitions.xml 文件中定义。以及在每个SCA组件描述文件中分别描述。With respect to processing, computing aplicable policies and applying them is concerned here is what the Release 1.0版本支持:

  • 可用的策略组用于绑定元素。也就是说:只支持交互策略。下一个版本将会支持实现元素上的策略
  • 策略定义的附件,如axis2配置参数。例如在binding-ws-axis2中有几个itest,例子中也有一个 helloworld-ws-service-secure,也使用了与ws-security有关的策略。
  • itest 和例子中并没有实现“confidentiality intent”,原因是法律条款问题。 Tuscany尊重相关加密API的开发者的知识产权。
  • 支持WS-Policy附件, 但是不支持声明型策略
  • 在判断策略是否可用于某个sca元素的时候,在'appliesTo'属性中使用xpath表达式还不能被处理,因为我们正在整理 有关的标准,以及相关的实现 - http://www.mail-archive.com/tuscany-dev%40ws.apache.org/msg21699.html

[编辑] 如何在我的Web服务绑定中使用'confidentiality'策略 ?

  • 首先,你必须确保你已经获得了bouncycastle的法律许可. 该组织持有诸多与加密有关的专利 (如 IDEA)。
  • 接下来,你必须熟悉如何给Axis2设置加密。这里有一些相关的链接 http://wso2.org/library/234, http://wso2.org/library/174, http://wso2.org/library/255.
  • 在 ws-binding-axis2模块的itest和 helloworld-ws-service-secure示例中,definitions.xml 文件已经定义了与加密(confidentiality)相关的策略 修改Axis2ConfigParam策略附件中的值,以配合你在自己的应用中使用的配置,如keystore, 访问keystore所需的用户名和密码, 以及password callback handler 类等
  • 现在,设置你可以在binding.ws元素上设置加密了。类库bcprov-jdk15-132.jar必须在classpath上。
  • 有些JRE可能需要修改一些security.policy 中的设置。以处理一些加密提供商。我们在Sun和IBM的JRE里面都成功通过 了测试。
Personal tools