2012年11月28日水曜日

EclipseからBundle間のDependencyを確認する

EclipseでPlugin開発をしている時に、バンドル間の依存関係を知りたい時、どうやってみるか?
以下のPluginタブを開く

 で、依存性を確認したいバンドル上で右クリックして、"Open Dependencies"をクリックすると
 
下図みたいな感じで、依存関係がわかる。
 
 ちなみに、上のタブの端っこに
 
こんなアイコンがあるが、これで依存性の向きを指定できる。

2012年11月19日月曜日

VirtualBoxでBridge接続

NATとか、HostOnly接続とか、それぞれがホストOSとどのようにつながるかは、他のサイトを参考にしてもらい、ここでは、Bridge接続をするときの注意だけ書きます。

まず、以下環境。

MacOS 10.6.8
VritualBox 4.2.4
CentOS 6.3

MacOSはWifiでつながっているが、MACアドレス指定して、固定IPがふられています。
#これはRouterの設定でできました。私のRouterはNECのatermです。

取りあえず、VirtualBoxインストールして、CentOS入れます。
そこで、CentOSを起動する前に、Networkの設定をいじります。

といっても、NAT接続(恐らくデフォルト)になっているものを、Bridgeに変えるだけ。
ただ、ここでNICを指定するのだが、私はAirPortの記載があったNICを指定しました。

で、CentOSをインストール。
これでうまくつながるはず。


つながらない場合は、CentOSを入れ直すことはしなくても、以下のファイルをいじって
rebootとか、/etc/init.d/network restartすれば大丈夫。

でもはまったのが、NICをどうやって認識させるか、という事。
以下コマンドで解決!

/etc/sysconfig/network-script/ifcfg-eth0
を認識させるには

ifup eth0

逆に認識させないようにするには

ifdown eth0

でOK。

確認はifconfigでどうぞ。

2012年11月7日水曜日

JIRAをMySQLで

【環境】
CentOS: 6.3
JIRA: 5.1.8

 MySQLでUserを追加するために、

mysql -u root -p

でmysqlに入る。

◆Userの追加
Userを追加するために、以下を実行。(DBName: jiradb, UserName: jiradbuser)
#e.g. <ipaddress> =  192.168.0.1

mysql> GRANT ALL PRIVILEGES ON jiradb.* TO jiradbuser@<ipaddress> IDENTIFIED
 BY 'password';


確認のため、以下のコマンドを。

select user, host from mysql.user

 これで、↓みたいな感じで、登録できたら成功。

+----------------+-----------------+
| user           | host            |
+----------------+-----------------+
| root           | 127.0.0.1       |
| jiradbuser    | 192.168.0.1 |
| root           | localhost       |
+----------------+-----------------+

 ◆DBの追加
以下のコマンドを実行するだけ。

CREATE DATABASE jiradb CHARACTER SET utf8 COLLATE utf8_bin;

確認したければ、"show databases;"で。

◆Connectorの追加
私の環境ではすでに入っていたので、省略。本家参照。(ページの最後に追加)

◆ConnectionTest
Consoleから、以下のコマンドを叩くだけ。
/<InstallDirectory>/jira/bin/config.sh

画面に従って操作する。 ↓な感じ。太字が入力項目。

 --- Main Menu ---
  [H] Configure JIRA Home
  [D] Database Selection
  [A] Advanced Settings
  [S] Save and Exit
  [X] Exit without Saving

Main Menu> D

--- Database Selection ---
  Database Type : MySQL
  Instance      :
192.168.0.1:3306/jiradb
  Connect As    : jiradbuser / *****
 

*  [H] HSQL (not for production use)
  [M] MySQL
  [O] Oracle
  [P] PostgreSQL
  [S] SQL Server (MS-SQL)

  [X] Return to Main Menu


 Database Selection [H]> M
MySql Database Configuration.
Hostname ()>
192.168.0.1
Port ()> 3306
Database ()> jiradb
Username ()> jiradbuser
Password ()>
Test Connection  ([Y]/N)? > Y
Attempting to connect to 192.168.0.1:3306/jiradb
Connection successful!



このセットアップが終わって、やっとJIRAのSetup画面からDB接続ができるようになる。 

参照サイト
https://confluence.atlassian.com/display/JIRA/Connecting+JIRA+to+MySQL

ConfluenceとApacheHTTP連携

【OS】
CentOS 6.3

【前提】
ApacheHTTP側はすでにPort80で受け入れ可能であること
Confluece(4.3.2)が動作できること

【やりたいこと】
http://<Your Location>:8090

でアクセスするのを、

http://<Your Location>/confluence

でアクセスできるようにする。

【解説】
◆Confluence内のTomcatのserver.xmlを修正
<confluence install directory>/conf/server.xml

を開く。

- Connectorの記述を、水色字を追加する。
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8090" minProcessors="5"
                   maxProcessors="75"
                   enableLookups="false" redirectPort="8443" acceptCount="10" debug="0" connectionTimeout="20000"
                   useURIValidationHack="false" URIEncoding="UTF-8" protocol="AJP/1.3" />

- Context pathの記述を、水色字のように修正する。

<Context path="/confluence" docBase="../confluence" debug="0" reloadable="true" useHttpOnly="true">

◆Apache側のhttpd.confを修正
CentOS6の場合は、"/etc/httpd/conf/httpd.conf"にあるはず。

で、それを開いて
最下段に以下の1行を追加。

Include conf/extra/httpd-proxy.conf

◆Apache側のhttpd-proxy.confを修正 or 新規作成
 /etc/httpd/conf/extra/httpd-proxy.confファイルを開く。
#extraフォルダ、httpd-proxy.confファイルがない場合は新規で作成する。

開いたら、以下の3行を追加する。
#Port:8090はConflueceのDefault。

<Location /confluence>
     ProxyPass ajp://<Your Location>:8090/confluence
</Location>


◆仕上げ

設定が終わったら、"sudo apachectl graceful"を忘れずに。

ブラウザから、"http://<Your Location>/confluence
でConfluenceにアクセスできるはず。


2012年11月6日火曜日

Spring-Axis2連携 on OSGi 其の2(完結)

其の1の続き

java.lang.ClassNotFoundException: org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
 
のExceptionが出ていたので、SpringServletContextObjectSupplierクラスを参照したけど、よくわからん。
なので、親クラスのSpringObjectSupplierをみると、public static Object createServiceObject(final AxisService service) な
メソッドがあるではないか!
 
そして、このメソッド見たら、こんな文字が!(下の赤字) 
 
  /**
     * Create a service object for a given service. The method first looks for
     * the {@link Constants#SERVICE_OBJECT_SUPPLIER} service parameter and if
     * this parameter is present, it will use the specified class to create the
     * service object. If the parameter is not present, it will create an
     * instance of the class specified by the {@link Constants#SERVICE_CLASS}
     * parameter.
     *
     * @param service
     *            the service
     * @return The service object or <code>null</code> if neither the
     *         {@link Constants#SERVICE_OBJECT_SUPPLIER} nor the
     *         {@link Constants#SERVICE_CLASS} parameter was found on the
     *         service, i.e. if the service doesn't specify how to create a
     *         service object. If the return value is non null, it will always
     *         be a newly created instance.
     * @throws AxisFault
     *             if an error occurred while attempting to instantiate the
     *             service object
     */
 
つまり、他のサイトなどで参考にしていたServiceObjectSupplierの指定を外せば、
ServiceClassのインスタンスを生成してくれると!
そして、ServiceClassはwsdlでservices.xmlを生成した際に記述済み!

という事で、ServiceObjectSupplierの記載をservices.xmlからコメントアウトすると、
今度は以下のException
 
[ERROR][11/06/2012 20:14:26:883] loader constraint violation: loader (instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) previously initiated loading for a different type with name "javax/activation/DataHandler" (org.apache.axis2.transport.http.AxisServlet) 
 java.lang.LinkageError: loader constraint violation: loader (instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) previously initiated loading for a different type with name "javax/activation/DataHandler"
 at java.lang.Class.getDeclaredFields0(Native Method)
 at java.lang.Class.privateGetDeclaredFields(Class.java:2291)
 at java.lang.Class.getDeclaredFields(Class.java:1743)
...
 
何やら、javax/activation/DataHandlerが怪しいなー、という事で、javax.actionvationを文字列検索して
ヒットした、com.springsource.javax.activationバンドルをRequired Plug-insに追加して再起動!

目的のメソッドにデータが受信できた!!!


※このBundleを起動する前に、WebServerBundle(Jetty等)を起動しておかないと、Serviceの登録ができていないため、Serviceがちゃんと動きません。

2012年11月1日木曜日

Spring-Axis2連携 on OSGi 其の1

備忘録として。

まず、既存のPlatformにSpringFrameworkでAxis2連携に必要なモジュールがなかった。。。
→ http://www.springsource.org/
から、サイトの右下にある、以下の図の"Spring Framework"を選択。



今回は、他のjarが3.0.3を使用していたので合わせるために、以下の図の3.0.3をダウンロード。


何が足りなかったかは後で調査するとして、解凍したJar群をTargetPlatformにぶち込む。

また、Axis2本家のサイトの下の方に隠れてServiceLifeSycleの記載が!
→ http://axis.apache.org/axis2/java/core/docs/spring.html

さらりと
public class SpringInit implements ServiceLifeCycle {

なクラスを作ってね!って書いてある。。。
取りあえずそのクラス作って、services.xmlに以下の記述を追加してOSGi起動!
<service name="SpringAwareService" class="spring.SpringInit">
それとなく動いたものの、なぜかspring-bean.xsdがねーよ!と怒られる。
 [ WARN][11/07/2012 10:35:38:594] Ignored XML validation warning (org.springframework.beans.factory.xml.XmlBeanDefinitionReader) 
 org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/beans/spring-beans.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
 at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
 at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.warning(ErrorHandlerWrapper.java:96)
 at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:380)
 at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
 at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaErr(XSDHandler.java:2541)
 at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaWarning(XSDHandler.java:2532)
 at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:1836)
 at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:531)
 at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:552)
 at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.findSchemaGrammar(XMLSchemaValidator.java:2436)
 at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1781)
 at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:705)
 at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
 at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626)
 at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3103)
 at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:922)
 at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
 at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
 at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
 at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
 at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
 at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
 at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235)
 at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
 at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
 at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:126)
 at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:92)
 at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
 at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
 at spring.SpringInit.startUp(SpringInit.java:23)
 at org.apache.axis2.deployment.ServiceBuilder.loadServiceLifeCycleClass(ServiceBuilder.java:526)
 at org.apache.axis2.deployment.ServiceBuilder.populateService(ServiceBuilder.java:213)
 at org.apache.axis2.osgi.deployment.OSGiServiceGroupBuilder.populateServiceGroup(OSGiServiceGroupBuilder.java:107)
 at org.apache.axis2.osgi.deployment.ServiceRegistry.addServices(ServiceRegistry.java:112)
 at org.apache.axis2.osgi.deployment.ServiceRegistry.register(ServiceRegistry.java:49)
 at org.apache.axis2.osgi.deployment.tracker.BundleTracker$1.bundleChanged(BundleTracker.java:70)
 at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:919)
 at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
 at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 4 in XML document from class path resource [META-INF/applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)

とりあえず、いろいろ調べたところ、META-INF/以下に以下のファイルを置くのがよさそう。
spring.schemas 
spring.handlers
#さっきのSpringInitの中の実装でも見にいってるし。
ちなみにこのファイルは、Springのサイトからダウンロードした時に含まれている、 "org.springframework.beans-3.0.3.RELEASE.jar"の中のMETA-INFの中にあるものを流用。
ここでOSGi起動!したが、なぜか、org.springframework.beans.factoryなんちゃらで怒られた。
原因は、"org.springframework.beans"バンドルをRequiredPlug-insではなくImportedPackagesでImportしていたから。
なので、RequiredPlug-insでrequireしてOSGi起動!
java.lang.ClassNotFoundException: org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier

続き
http://dah8ra.blogspot.jp/2012/11/spring-axis2-on-osgi_6.html