centos6.8にphp7をyumでインストールする
インストール
リポジトリ
sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm sudo rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
※リポジトリを設定する
yum
sudo yum install php70w php70w-bcmath php70w-cli php70w-common \ php70w-dba php70w-devel php70w-embedded php70w-enchant \ php70w-fpm php70w-gd php70w-imap php70w-interbase php70w-intl \ php70w-ldap php70w-mbstring php70w-mcrypt \ php70w-mysqlnd php70w-odbc php70w-opcache php70w-pdo \ php70w-pdo_dblib php70w-pear php70w-pecl-apcu php70w-pecl-imagick \ php70w-pecl-redis php70w-pecl-xdebug php70w-pgsql php70w-phpdbg \ php70w-process php70w-pspell php70w-recode php70w-snmp php70w-soap \ php70w-tidy php70w-xml php70w-xmlrpc
※とりあえず必要そうなものを調べるの面倒なんでいれられそうなやつ全部
結果
$ php -v PHP 7.0.10 (cli) (built: Aug 20 2016 08:13:48) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies $
JavaEEによるレルム認証を試しました
4時間がかかりました。
これって実際のセミナーとかではどんな感じだったのかな?
結構時間がかかった
1時間とか2時間では無理な感じがしました。まあ、私がよくわかっていないのかもしれませんけど。
今更ながらJavaEEのWebscoketのサンプルを試してみた
当時はJavaEEってわかってなかった
今でもきちんとわかっているわけではないがプロジェクトを構築してサンプルを起動できるようになっているので
資料見ながらやってみた
ハンズオン用と思われるので資料がどこかにあったかも
実際、全部見ながらやってコピペしていないのでそこそこ手間取った
所感
不慣れであるため手間取りはしましたがソースコードの記述はほとんどないので
楽といえば楽できた感じがあります。
websocketとかはサーバで実行するときはヘッダーとかなんかいろいろやらないといけない感じがしたけど
特に意識せずに作成できたのが良かった感じ。
作り方を覚える必要があるけど覚えていくことで生産性があがるかもしれないので期待したい
どうでもいいこと
スライドシェアって下スクロールできたんですね…
androidでローカルhtmlを表示する
cordovaでも良いかもと思われましたが
なんとなるやりたくなったので調べ直しました。
環境
android2系
エミュレータが新しくなってなんと動くようになっていた
手順
プロジェクトを作成
※ブランクアクティビティでいいかと
buildファイルを修正
app/build.gradle
apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "jp.mshige1979.app.samplelocalhtml1" minSdkVersion 15 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { debug { debuggable true } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets{ main{ assets.srcDirs = ["assets"] } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:22.2.1' }
※sourceSetsを追加してassetsディレクトリを指定しておく
MainActivityを修正
package jp.mshige1979.app.samplelocalhtml1; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.webkit.JavascriptInterface; import android.webkit.WebView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Webbiewを生成 WebView oWebView = new WebView(getApplicationContext()); // javascriptを有効にする oWebView.getSettings().setJavaScriptEnabled(true); // ローカルのhtmlを読み込む oWebView.loadUrl("file:///android_asset/test.html"); // コールバック用クラスを定義 class MyJavaScriptInterface { /** * アラートを表示します。 * * @param message メッセージ。 */ @JavascriptInterface public void showAlert( String message ) { // アラート表示処理 ... Log.d("test", "hogehoge start"); Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show(); Log.d("test", "hogehoge end"); } } MyJavaScriptInterface obj = new MyJavaScriptInterface(); oWebView.addJavascriptInterface(obj, "appJsInterface" ); // ビューを設定する setContentView(oWebView); } }
app/assets/test.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Bootstrap 101 Template</title> <link href="css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> <h1>Twitter Bootstrap Sample</h1> <button type="button" class="btn btn-primary" id="btn1">btn1</button> </div> <script src="js/jquery.min.js"></script> <script src="js/bootstrap.min.js"></script> <script> $(function(){ $("#btn1").on("click", function(){ appJsInterface.showAlert(String((new Date()))); }); }); </script> </body> </html>
※appJsInterface.showAlert(String((new Date())));でJavaで定義したメソッドを呼び出せる
実行
JavaEEでRestfulを使って見る
環境
Netbeans8.1
プロジェクトを作成
mavenで作成
↓
↓
pom.xmlを修正
<dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> </dependencies>
再ビルド
サンプル
SampleRest.java
package com.mycompany.restful01; import javax.ws.rs.ApplicationPath; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Application; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** */ @Path("/MyRest") @ApplicationPath("/resources") public class SampleRest extends Application{ // http://localhost:8080/Restful01/resources/MyRest/hello @GET @Path("/hello") public String say(){ return "hello,world"; } }
※パッケージは必ず指定しないとうまく動作しない感じです
↓
パラメータ指定
SampleRest2.java
package com.mycompany.restful01; import javax.ws.rs.ApplicationPath; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Application; import javax.ws.rs.core.Response; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** */ @Path("/MyRest") @ApplicationPath("/resources") public class SampleRest2 extends Application{ @GET @Path("/echo") public Response message(@QueryParam("message") String msg){ return Response.ok("msg = [" + msg + "]").build(); } }
↓
json/xml
User.java
package com.mycompany.restful01; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } private String email; public User(){ } public User(String name, String email) { super(); this.name = name; this.email = email; } }
SampleRest3.java
package com.mycompany.restful01; import javax.ws.rs.ApplicationPath; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Application; import javax.ws.rs.core.MediaType; /** */ @Path("/MyRest") @ApplicationPath("/resources") public class SampleRest3 extends Application{ @GET @Path("/user.xml") @Produces({MediaType.APPLICATION_XML}) public User getUserXml(){ return new User("hoge", "hoge1@test.com"); } @GET @Path("/user.json") @Produces({MediaType.APPLICATION_JSON}) public User getUserJson(){ return new User("hoge", "hoge1@test.com"); } }
↓
所感
結果を返すだけなら意外と簡単な感じ。
CDIなどを使っていないのでなんとも言えないが他の機能と同関連できるか調査することも必要
JavaEEのサンプルアプリをCentOSに入れてみる
公開前の予行演習
実際にどうするかはわからないけどNetBeansで作成だけというのも変なので
ちょっとwarファイルをあげてみる
環境
vagrantのCentOS6.7
Java8
glassfish4.1
Vagrantの設定ファイル
Vagrantfile
#-*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure(2) do |config| # Every Vagrant development environment requires a box. You can search for # boxes at https://atlas.hashicorp.com/search. config.vm.box = "centos67_01" # Create a private network, which allows host-only access to the machine # using a specific IP. config.vm.network "private_network", ip: "192.168.33.10" # Share an additional folder to the guest VM. The first argument is # the path on the host to the actual folder. The second argument is # the path on the guest to mount the folder. And the optional third # argument is a set of non-required options. config.vm.synced_folder "./", "/vagrant", \ create: true, owner: 'vagrant', group: 'vagrant', \ mount_options: ['dmode=777,fmode=777'] # Provider-specific configuration so you can fine-tune various # backing providers for Vagrant. These expose provider-specific options. # Example for VirtualBox: # config.vm.provider "virtualbox" do |vb| # Customize the amount of memory on the VM: vb.memory = "1024" end end
ツールインストール
Java8
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u91-b14/jdk-8u91-linux-x64.rpm sudo rpm -ivh jdk-8u91-linux-x64.rpm
Glassfish4.1
wget http://download.java.net/glassfish/4.1/release/glassfish-4.1.zip unzip glassfish-4.1.zip sudo mv glassfish4 /usr/local/.
apache
sudo yum install httpd httpd-devel -y sudo service httpd start sudo chkconfig httpd on
glassfish設定
glassfishをlocalhost以外で使用する場合はちょっと制限がある
起動
sudo /usr/local/glassfish4/bin/asadmin start-domain
管理者パスワード変更
$ sudo /usr/local/glassfish4/bin/asadmin change-admin-password Enter admin user name [default: admin]> Enter the admin password> Enter the new admin password> Enter the new admin password again> Command change-admin-password executed successfully. $
※ユーザーは"admin"、パスワードは空文字になっているのでそれ以降のところにパスワードを設定する
ログインストアにパスワードを登録
$ sudo /usr/local/glassfish4/bin/asadmin login Enter admin user name [Enter to accept default]> admin Enter admin password> Login information relevant to admin user name [admin] for host [localhost] and admin port [4848] stored at [/root/.gfclient/pass] successfully. Make sure that this file remains protected. Information stored in this file will be used by administration commands to manage associated domain. Command login executed successfully. $
※管理者パスワードと同じものにする
SSLを有効化
$ sudo /usr/local/glassfish4/bin/asadmin enable-secure-admin You must restart all running servers for the change in secure admin to take effect. Command enable-secure-admin executed successfully. $
glassfish再起動
$ sudo /usr/local/glassfish4/bin/asadmin stop-domain Waiting for the domain to stop . Command stop-domain executed successfully. [vagrant@localhost ~]$ sudo /usr/local/glassfish4/bin/asadmin start-domain Waiting for domain1 to start ..... Successfully started the domain : domain1 domain Location: /usr/local/glassfish4/glassfish/domains/domain1 Log File: /usr/local/glassfish4/glassfish/domains/domain1/logs/server.log Admin Port: 4848 Command start-domain executed successfully. $
JavaDB制御
/usr/java/jdk1.8.0_91/jre/lib/security/java.policy
grant { // 追加 permission java.net.SocketPermission "localhost:1527", "listen,resolve"; };
※最後の方に追加する
JavaDB起動
sudo /usr/local/glassfish4/bin/asadmin start-database
データベース作成
$ /usr/local/glassfish4/javadb/bin/ij ijバージョン10.10 ij> connect 'jdbc:derby://localhost/MemoDB;create=true'; ij> create table memo( > id int not null generated always as identity ( start with 1, increment by 1), > memo varchar(512), > constraint pk_memo primary key(id) > ); 0行が挿入/更新/削除されました ij> select * from memo; ID |MEMO -------------------------------------------------------------------------------------------------------------------------------------------- 0行が選択されました ij> exit; $
デプロイ
アプリケーションを指定してデプロイする
warをアップロード
パラメータ設定
プロキシ設定
/etc/httpd/conf/httpd.conf
<IfModule mod_proxy.c> ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://127.0.0.1:8080/ ProxyPassReverse / http://127.0.0.1:8080/ ProxyPassReverseCookieDomain 127.0.0.1:8080 192.168.33.10 ProxyPassReverseCookiePath / / </IfModule>
※末尾に追加
再起動
sudo service httpd restart
確認
参考
Java DB データベースの起動と停止 (Sun GlassFish Enterprise Server v2.1.1 リリースノート)
JavaDB
Java EE 7 を試すために CentOS に GlassFish をインストール - グロブ
Java7u51でJavaDB(1527port)が起動しなくなったときの対処 - Qiita
Glassfish Apacheとの連携 (mod_proxy_http) - @//メモ
所感
とりあえずこんな感じで対応する。
http://ほげほげ/の場合の画面をどうするか考えないといけない
なかなか設定サンプルがないのでいろいろ探して考えてみる
JavaEE7でJavaMailを試す
環境
NetBeans8.1
Glassfish4.1
問題点
Glassfish4.1.1ではなぜかglassfishのメールセッションの設定ができない
参考
www.youtube.com
※英語でも動画で作業をなぞるとできるもんです
画面設定
index.xhtml
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <h:form prependId="false"> <h:commandButton value="送信" action="#{mailBean.send()}"></h:commandButton> </h:form> </h:body> </html>
MailBean.java
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package bean; import javax.annotation.Resource; import javax.inject.Named; import javax.enterprise.context.RequestScoped; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; /** * */ @Named(value = "mailBean") @RequestScoped public class MailBean { @Resource(name="mail/gmail") private Session session; public void send(){ Message msg = new MimeMessage(session); try{ msg.setSubject("aaaaa"); msg.setText("aaaaaaa"); msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("送信先のメールアドレス@gmail.com")); Transport.send(msg); } catch(MessagingException e){ e.printStackTrace(); } } }
glashfish設定
ここまで
所感
Javaの場合は最新の技術というより保守に向けてのやり方の方が安定しているので
あまり最新のことに凝った情報が見つけきれない感じがする。
あったと思ってもちょっとコアすぎでで???って状態があるので
自分がつまづいている部分が本来ありえない場所だからかな…